模块课程(4/4)
套装
集合是唯一、无序元素的集合。三种超能力:
- 自动去重:相同元素添加两次没有效果。
- O(1) 成员资格测试:
x in s即使有数百万也非常快 元素的数量(它是基于哈希的,就像字典一样)。 - 集合运算:并、交、差、对称差。
创建一个集合
vuoto = set() # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3]) # {1, 2, 3}单独的大括号 {} 创建一个空字典,而不是一个集合:对于空集合
你需要set()。
修改集合
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.add(1) # nessun effetto (già presente)
s.discard(99) # rimuove se presente, silenzioso altrimenti
s.remove(2) # rimuove o solleva KeyError设置操作
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # {1, 2, 3, 4, 5, 6} unione
a & b # {3, 4} intersezione
a - b # {1, 2} differenza (in a ma non in b)
a ^ b # {1, 2, 5, 6} differenza simmetrica (xor)还有一些方法形式(a.union(b)、a.intersection(b)、...)
加法接受任何可迭代对象,而不仅仅是集合。
会员测试
parole = {"ciao", "mondo", "python"}
"ciao" in parole # True O(1)
"java" not in parole # True作为比较:在 list 内使用 in 进行搜索的时间复杂度为 O(n),并且时间较长
列出它要慢得多。
冻结集:不可变版本
frozenset({1, 2, 3}) 是可哈希版本:它可以是字典键或
另一个集合的元素。
设置操作和性能
集合被实现为哈希表,这使得成员资格测试 (x in my_set) 非常快:它以恒定时间 O(1) 运行,与搜索需要线性时间 O(n) 的列表不同。此外,它们还支持代数运算,例如并 (|)、交集 (&) 和差 (-)。
尝试一下
给定列表“nums = [1, 2, 2, 3, 3, 3, 4]”,使用唯一值(以任何顺序)构建“unique_items”,然后将“count”计算为 len(unique_items)。评估“计数”。
显示提示
set(nums) 删除重复项。
3 次尝试后可用的解决方案
复习练习
给定“a = {1, 2, 3, 4}”和“b = {3, 4, 5, 6}”,将交集计算为“common_items”,将 a-b 的差值计算为“only_a”。评估元组“(common_items, only_a)”。
显示提示
& 交集,- 差异。
3 次尝试后可用的解决方案
额外的挑战
Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.
显示提示
您可以使用 & 运算符或 set_a.intersection(set_b) 方法。
3 次尝试后可用的解决方案