Python避坑:别再用"if x in list"查元素了!集合才是最棒的!!

33 阅读2分钟

新手处理"判断元素是否存在"时,清一色死磕列表(list),但遇到数据量稍大的场景, if x in list  慢得像蜗牛——其实Python的集合(set)才是专门干这事的"神器",这篇带你吃透集合的3个进阶偏基础用法!

一、成员判断:set比list快100倍(原理很简单)

列表是"线性存储",查元素要逐个遍历;集合是"哈希存储",直接定位元素位置,数据越多差距越明显。

反面例子(list写法):

# 模拟10万条数据的列表
big_list = list(range(100000))
# 判断元素是否存在(慢!)
print(99999 in big_list)  # 输出:True,但要遍历整个列表

 

进阶写法(set写法):

# 转成集合(仅需一次转换)
big_set = set(range(100000))
# 判断元素是否存在(瞬间完成!)
print(99999 in big_set)  # 输出:True,直接哈希查找

二、去重:一行搞定(告别for+if去重)

列表去重需要写循环+判断,还得维护临时列表,集合天生"不允许重复元素",一行就能去重。

反面例子(list去重):

nums = [1,2,2,3,3,3,4,4,4,4]
unique_nums = []
for num in nums:
    if num not in unique_nums:
        unique_nums.append(num)
print(unique_nums)  # 输出:[1,2,3,4]

 

进阶写法(set去重):

nums = [1,2,2,3,3,3,4,4,4,4]
unique_nums = list(set(nums))  # 集合去重后转列表
print(unique_nums)  # 输出:[1,2,3,4](顺序不保证,需顺序则用dict.fromkeys)

三、集合运算:快速求交集/并集/差集(不用手动循环)

处理两个数据集的关联关系(比如共同元素、独有元素),集合运算比列表循环简洁10倍。

a = {1,2,3,4}
b = {3,4,5,6}

# 1. 交集(两个集合都有的元素)
print(a & b)  # 输出:{3,4},等价于 a.intersection(b)
# 2. 并集(两个集合的所有元素,去重)
print(a | b)  # 输出:{1,2,3,4,5,6},等价于 a.union(b)
# 3. 差集(a有但b没有的元素)
print(a - b)  # 输出:{1,2},等价于 a.difference(b)

 

核心总结:集合适合"去重、成员判断、集合运算",列表适合"有序存储、按索引访问",用对场景代码直接提速!