Python基础(六):组合数据类型II

Python中的可变对象与不可变对象

在 python 中,字符串元组数字类型是不可更改的对象,而列表字典等则是可以修改的对象。

字符串

  • 举例

    string = "abcd"
    print(string)
    string[2] = "f"

  • 输出结果

    abcd   
    
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    ~\AppData\Local\Temp\ipykernel_17616\1561895390.py in <cell line: 3>()
          1 string = "abcd"
          2 print(string)
    ----> 3 string[2] = "f"
    
    
    TypeError: 'str' object does not support item assignment

元组

  • 举例

    tup1 = 1, 2, "a", "python"
    print(tup1)
    tup1[2] = "hello"

  • 输出结果

    (1, 2, 'a', 'python')  
    
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    ~\AppData\Local\Temp\ipykernel_17616\737283433.py in <cell line: 3>()
          1 tup1 = 1, 2, "a", "python"
          2 print(tup1)
    ----> 3 tup1[2] = "hello"
    
    
    TypeError: 'tuple' object does not support item assignment

几种组合数据类型的操作

一、集合操作

# 创建集合
thisset = set(("Google", "Runoob", "Taobao"))
# 添加元素
thisset.update([10, 2], {3, 4}, (5, 6))
thisset.add("python")  # set.add() takes exactly one argument
thisset
{10, 2, 3, 4, 5, 6, 'Google', 'Runoob', 'Taobao', 'python'}
# 删除元素
thisset.remove("Taobao")  # 不存在会发生错误
thisset.discard("Facebook")  # 不存在不会发生错误
print(thisset)
thisset.pop()
{2, 3, 4, 5, 6, 10, 'Google', 'python', 'Runoob'}

2
# 判断元素是否在集合中
print("python" in thisset)
True
# 拷贝集合
thisset.copy()
{10, 3, 4, 5, 6, 'Google', 'Runoob', 'python'}
# 清空集合
thisset.clear()
thisset
set()
ls = [1,1,1,1,2,3,3]
s = set(ls)
s
{1, 2, 3}

二、元组操作

tup = 1, 3, "a", (4, "world", 10)  # 可以不加括号
print(tup)
tup[3][1]  # 下标访问
print(tup.count(3))
print(tup.index((4, "world", 10)))
(1, 3, 'a', (4, 'world', 10))
1
3

三、列表操作

list1 = ['Google', 'Runoob', 1997, 2000]
# 更新列表
list1[1] = "Taobao"  # 替换
list1.append(2022)  # 追加
list1.insert(0, "start")  # 指定位置插入
list1
['start', 'Google', 'Taobao', 1997, 2000, 2022]
# 删除元素
del list1[3]
list1.remove(2000)  # 删除第一个匹配值
list1.pop(1)  # 指定下标删除
list1
['start', 'Taobao', 2022]
# 反转列表
list1.reverse()
# 拷贝
list2 = list1.copy()
list2
[2022, 'Taobao', 'start']
# 排序
list3 = [["a", 3], ["hel", 5], ["back", 1], ["white", 11]]
list3.sort(key=lambda x: x[1], reverse=True)
list3
[['white', 11], ['hel', 5], ['a', 3], ['back', 1]]

List sort() 方法

  • sort() 函数用于对原列表进行排序,list.sort( key=None, reverse=False)
    • key —— 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse —— 排序规则,reverse = True 降序, reverse = False 升序(默认)。
  • 可以根据元素的固有属性进行排序,如:第N个元素。借助 lambda表达式:
    • list.sort(key=lambda ele:ele[1]) # 根据第2个元素排序

四、字典操作

# 创建字典
d = {"name": "luminous", "age": 22, "site": "xi'an", "height": 170}
# 访问键值
Name = d["name"]
Age = d.get("age", 0)
print("Name:{} , Age:{}".format(Name, Age))
d["site"] = "lanzhou"  # 修改键值
d["other"] = 111  # 添加键值对
d
Name:luminous , Age:22

{'name': 'luminous', 'age': 22, 'site': 'lanzhou', 'height': 170, 'other': 111}
# 删除键值对
del d["height"]
print(d.pop("other", 100))  # 删除键值对,返回删除的值,若键不存在,返回默认值100
print(d)
d.popitem()  # 删除最后一对键值(python3.9)
111
{'name': 'luminous', 'age': 22, 'site': 'lanzhou'}

('site', 'lanzhou')
# 返回视图对象
keys = d.keys()
values = d.values()
items = d.items()
print(items)
print("keys : {}\nvalues : {}".format(list(keys),
                                      list(values)))  # 使用list()转换为列表
print(list(items))  # 使用list()转换为列表
dict_items([('name', 'luminous'), ('age', 22)])
keys : ['name', 'age']
values : ['luminous', 22]
[('name', 'luminous'), ('age', 22)]
# 视图对象是动态的,删除字典的 key,视图对象转为列表后也跟着变化
del d["name"]
print(list(items))  # 使用list()转换为列表
[('age', 22)]
d.clear()  # 清空字典
d
{}
# 注意:若将字典直接转换为列表,结果如下:
d = {"name": "luminous", "age": 22, "site": "xi'an", "height": 170}
print(list(d))
['name', 'age', 'site', 'height']

字典 items() 方法 以列表返回视图对象,是一个可遍历的 key/value 对。

  • dict.keys()dict.values()dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,意味着字典改变,视图也会跟着变化。

  • 视图对象不是列表,不支持索引,可以使用 list() 来转换为列表。

  • 字典的视图对象都是只读的,不能对视图对象进行任何的修改。


Python基础(六):组合数据类型II
https://luminous-ee.github.io/2023/01/26/Python基础(六):组合数据类型II/
作者
落与
发布于
2023年1月26日
许可协议