ai时代python集合

集合set

s = {'a', 'b', 'c'}

# 增加 合并
s |= {'g', 'h'}         # 并集更新

# 删除
s.remove('a')           # 不存在会报错
s.discard('a')          # 不存在不报错

s.pop()                 # 随机删除一个, s.pop('a') 不行, 不支持
s.clear()               # 清空



# 查询

'a' in s                # 成员检测, 所有集合都支持的操作, s.get('a') 不支持
s.issubset(other)       # 子集检测
s.issuperset(other)     # 超集检测
len(s)                  # 获取元素数量
bool(s)                 # 检查是否为空:True为非空,False为空


# 集合运算
s1 & s2                 # 交集
s1 | s2                 # 并集  
s1 - s2                 # 差集
s1 ^ s2                 # 对称差集, 仅属于一个集合的元素, 并集-交集

操作 list tuple dict set
[index] ✅(key)
.get()
.pop() 不能带参数
in
len()
切片[:]

字典dic

d = {'a': 1, 'b': 2, 'c': 3}

# 访问
d['a']                    # 1 (不存在会KeyError)
d.get('a')               # 1 (推荐,不存在返回None)
d.get('x', 'default')    # 'default' (指定默认值)


'a' in d                 # True - 检查key是否存在
1 in d.values()          # True - 检查value是否存在

d.keys()                 # dict_keys(['a', 'b', 'c'])
d.values()               # dict_values([1, 2, 3])  
d.items()                # dict_items([('a', 1), ('b', 2), ('c', 3)])

len(d)                   # 3
bool(d)                  # True (空字典为False)

# 增加
d['b'] = 2               # 可能是个修改
# 合并字典 
d3 = {**d1, **d2}        # (Python 3.5+)
d3 = d1 | d2             # 同上, (Python 3.9+)

# 安全添加 (key不存在才添加)
d.setdefault('i', 9)     # 返回9,d中添加 'i': 9
d.setdefault('a', 99)    # 返回1,'a'已存在不会修改


# 删除
del d['a']               # 不存在会KeyError
d.pop('b')               # 返回2,不存在会KeyError  
d.pop('x', 'default')    # 返回'default',安全删除
d.popitem()              # 删除最后插入的项 (Python 3.7+), 返回 ('c', 3)
d.clear()                # 清空 {}



# 复制
d_copy = d1.copy()       # 浅拷贝
d_copy = dict(d1)        # 另一种复制方式


# 创建字典的多种方式
dict1 = dict(a=1, b=2)                    # 关键字参数
dict2 = dict([('a', 1), ('b', 2)])        # 键值对列表  
dict3 = dict(zip(['a', 'b'], [1, 2]))     # zip组合
dict4 = {k: v for k, v in [('a', 1), ('b', 2)]}  # 字典推导式

# 默认值字典
from collections import defaultdict
dd = defaultdict(list)   # 访问不存在的key会自动创建空list
dd['key'].append(1)      # 自动创建 dd['key'] = [],然后append

数组列表 (List) - 可变类型

增加 (Create/Add)

# 创建
arr = [1, 2, 3]
arr = []  # 空列表

# 合并
arr += [7, 8]           # [1, 2, 3, 4, 5, 6, 7, 8]
# 解包合并
combined_list = [*list1, *list2]


# 指定位置插入
arr.insert(0, 0)        # [0, 1, 2, 3, 4, 5, 6, 7, 8] (在索引0插入)
arr.insert(-1, 'x')     # 在倒数第二个位置插入

删除 (Delete)

arr = [1, 2, 3, 2, 4]

# 按值删除
arr.remove(2)           # [1, 3, 2, 4] (删除第一个2)

# 按索引删除
del arr[1]              # [1, 2, 4] (删除索引1)
item = arr.pop()        # 删除并返回最后一个元素
item = arr.pop(0)       # 删除并返回索引0的元素

# 清空
arr.clear()             # []

修改 (Update)

arr = [1, 2, 3, 4]

# 单个元素
arr[0] = 10             # [10, 2, 3, 4]

# 切片修改
arr[1:3] = [20, 30]     # [10, 20, 30, 4]
arr[::2] = [100, 300]   # [100, 20, 300, 4] (步长为2)

# 排序
arr.sort()              # 原地排序
arr.reverse()           # 原地反转

查询 (Read)

arr = [1, 2, 3, 2, 4]

# 访问
print(arr[0])           # 1 (第一个)
print(arr[-1])          # 4 (最后一个)
print(arr[1:3])         # [2, 3] (切片)

# 查找
index = arr.index(2)    # 1 (第一个2的索引)
count = arr.count(2)    # 2 (2的出现次数)
exists = 3 in arr       # True (是否存在)

# 长度
length = len(arr)       # 5

元组 (Tuple) - 不可变类型

创建 (Create)

# 创建
tup = (1, 2, 3)
tup = 1, 2, 3           # 括号可选
tup = (1,)              # 单元素元组(注意逗号)
tup = ()                # 空元组

# 从其他类型转换
tup = tuple([1, 2, 3])  # 从列表
tup = tuple("abc")      # ('a', 'b', 'c')

查询 (Read) - 与列表相同

tup = (1, 2, 3, 2, 4)

# 访问(同列表)
print(tup[0])           # 1
print(tup[-1])          # 4
print(tup[1:3])         # (2, 3)

# 查找(同列表)
index = tup.index(2)    # 1
count = tup.count(2)    # 2
exists = 3 in tup       # True
length = len(tup)       # 5

增加/修改/删除 - 不支持!

tup = (1, 2, 3)

# 这些操作都会报错
# tup[0] = 10           # TypeError
# tup.append(4)         # AttributeError
# del tup[0]            # TypeError

实用操作对比表

操作 列表 元组 说明
创建 [1,2,3] (1,2,3) 元组括号可选
访问 arr[0] tup[0] 相同语法
切片 arr[1:3] tup[1:3] 相同语法
长度 len(arr) len(tup) 相同语法
包含 x in arr x in tup 相同语法
查找 arr.index(x) tup.index(x) 相同语法
计数 arr.count(x) tup.count(x) 相同语法
修改 arr[0]=x ❌ 不支持 元组不可变
添加 arr.append(x) ❌ 不支持 元组不可变
删除 arr.remove(x) ❌ 不支持 元组不可变

性能和使用建议

# 列表:数据会变化时使用
nodes = ['main', 'child1', 'child2']
nodes.append('child3')  # 可以修改

# 元组:数据固定时使用(更快,更安全)
coordinates = (100, 200)  # 坐标通常不变
rgb_color = (255, 0, 0)   # 颜色值通常不变

# 函数返回多值时常用元组
def get_position():
    return 100, 200       # 返回元组
x, y = get_position()     # 解包