[python] Python元组、字典与集合的全面解析
元组
元组是Python中的一种不可变序列类型,使用圆括号 ()
定义。元组中的元素可以是不同的数据类型,且即使只有一个元素,末尾也必须加逗号,否则定义的数据类型将不再是元组
yuan1 = () # 空元组
yuan = (1, 2, '3') # 包含多个元素的元组
yuan2 = (1,) # 单个元素的元组
print(yuan) # 输出: (1, 2, '3')
print(yuan1) # 输出: ()
print(yuan2) # 输出: (1,)
元组与列表的主要区别在于元组是不可变的,即不支持增删改操作,只能进行查询操作。
print(yuan[1]) # 输出: 2
元组支持 count
、index
和 len
等操作。
print(yuan.index(1)) # 输出: 0
print(len(yuan)) # 输出: 3
print(yuan.count(4)) # 输出: 0
列表推导式也可以用于元组。
[print(i * 2) for i in yuan] # 输出: 2 4 33
字典
字典是Python中的一种可变映射类型,使用键值对形式保存数据,键是唯一的。字典中的元素通过键名访问,而不是通过下标。
- get方法在获取值时可以设置默认值,如果没有查到则返回默认值
dict = {"id": 10001, "passwd": "123456"}
print(dict["id"]) # 输出: 10001
print(dict.get("id")) # 输出: 10001
print(dict.get("idd", 10000)) # 输出: 10000
- 字典支持修改、删除和添加元素。
- 在修改键对应的元素时,如果不存在这个键,那么将会添加新的键值
-
popitem:删除最后一个键值对
-
clear:清空键值对
dict["id2"] = 10003 # 添加新键值对
print(dict) # 输出: {'id': 10001, 'passwd': '123456', 'id2': 10003}del dict["id2"] # 删除指定键值对
print(dict) # 输出: {'id': 10001, 'passwd': '123456'}dict.popitem() # 删除最后一个键值对
print(dict) # 输出: {'id': 10001}# clear 清空内容 但是保留了字典
dict.clear()#pop 删除指定键值对, 不存在键值名就会报错
dict.pop("id")
- 字典嵌套字典
dict = {"id":101,"passwd":"123","id2":{"name":"id2","passwd":"234"}}print(type(dict["id2"]))
print(dict["id2"])
字典的常见操作包括求长度、获取所有键名、获取所有值以及获取所有键值对。
- 求长度 -----返回字典有多少个键值对
- items: 返回字典里面包含的所有键值对, 以元组形式体现
- keys 返回所有的键名
print(len(dict)) # 输出: 1
print(dict.keys()) # 输出: dict_keys(['id'])
[print(i) for i in dict.keys()] # 输出: id
[print(i) for i in dict.values()] # 输出: 10001print(dict.items()) # 输出: dict_items([('id', 10001)])
集合
集合是Python中的一种无序且元素唯一的数据结构,使用花括号 {}
定义。空集合必须使用 set()
定义,否则会定义成字典。
- 无序的,元素是唯一的
- 可以用元组或者列表去重得到
- 集合如果不是纯数字,那么每次运行的结果不一样,是因为hash值不同,但是int整形的哈希值就是它本身,再hash表中的位置不会被改变
s1 = {1, 2, 3}
s2 = set() # 空集合
s3 = {'1', '2', 3}
print(s1) # 输出: {1, 2, 3}
print(hash(1)) # 输出: 1
print(hash('1')) # 输出: 随机哈希值
集合具有自动去重的特性。
s4 = {1, 2, 3, 3, 3, 4, 5, 6}
print(s4) # 输出: {1, 2, 3, 4, 5, 6}
集合支持添加和删除元素。
- update:添加元素是多个添加,会把元素拆分比如"123" 会拆分成"1" "2" "3"三个元素,所以update传递必须是可迭代对象,像int是不可以的。
s4.add(4) # 添加单个元素
s4.add((1, 2)) # 添加元组
print(s4) # 输出: {1, 2, 3, 4, 5, 6, (1, 2)}s4.update('567') # 添加多个元素
print(s4) # 输出: {1, 2, 3, 4, 5, 6, (1, 2), '5', '6', '7'}s4.remove(3) # 删除指定元素
print(s4) # 输出: {1, 2, 4, 5, 6, (1, 2), '5', '6', '7'}s4.pop() # 删除随机元素
print(s4) # 输出: {2, 4, 5, 6, (1, 2), '5', '6', '7'}s4.discard(199) # 删除指定元素,不存在不报错
print(s4) # 输出: {2, 4, 5, 6, (1, 2), '5', '6', '7'}
集合支持交集和并集操作。
- 交集: 两个集合重合的部分
- 并集:两个集合去重后所有的数据
a = {1, 2, 3, 4}
b = {2, 3, 4, 5}
print(a & b) # 输出: {2, 3, 4}
print(a | b) # 输出: {1, 2, 3, 4, 5}
技术补充
- 元组:元组是不可变的,适合存储不需要修改的数据。由于不可变性,元组在某些情况下比列表更高效。
- 字典:字典的键必须是不可变类型(如字符串、数字、元组),而值可以是任意类型。字典的查找速度非常快,因为它是基于哈希表实现的。
- 集合:集合的元素必须是可哈希的,因此集合中的元素必须是不可变类型。集合常用于去重和集合运算(如交集、并集、差集等)。