集合是项目的集合。让我带你回到小学或高中的数学课。集合的数学定义也适用于 Python。集合是无序且未索引的不同元素的集合。在 Python 中,集合用于存储唯一项目,可以在集合之间找到 并集、交集、差集、对称差集、子集、超集 和 不相交集。
我们使用 set() 内置函数。
- 创建空集合
# 语法
st = set()
- 创建一个包含初始项目的集合
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
示例:
# 语法
fruits = {'banana', 'orange', 'mango', 'lemon'}
我们使用**len()**方法来查找集合的长度。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
len(st)
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
len(fruits)
我们使用循环来访问项目。我们将在循环部分看到这一点。
要检查列表中是否存在某个项目,我们使用 in 成员运算符。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? True
示例:
fruits = {'香蕉', '橙色', '芒果', '柠檬'}
print('芒果' in fruits ) # True
一旦集合创建后,我们不能改变其中的任何元素,但可以添加其他的元素。
- 使用 add() 方法添加单个元素
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.add('item5')
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')
- 使用 update() 方法添加多个元素 update() 方法允许向集合中添加多个元素。update() 接收一个列表作为参数。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)
我们可以使用 remove() 方法从集合中移除一个元素。如果找不到该元素,remove() 方法会抛出错误,因此最好先检查该元素是否存在于集合中。discard() 方法则不会抛出任何错误。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.remove('item2')
pop() 方法从集合中移除一个随机元素并返回该被移除的元素。
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.pop() # 从集合中移除一个随机元素
如果我们对被移除的元素感兴趣。
fruits = {'banana', 'orange', 'mango', 'lemon'}
removed_item = fruits.pop()
如果我们想要清空或清除集合中的所有项目,可以使用 clear 方法。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.clear()
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()
如果我们想要删除整个集合,可以使用 del 操作符。
# 语法
st = {'item1', 'item2', 'item3', 'item4'}
del st
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
del fruits
我们可以将列表转换为集合,也可以将集合转换为列表。将列表转换为集合会去除重复项,只保留唯一项。
# 语法
lst = ['item1', 'item2', 'item3', 'item4', 'item1']
st = set(lst) # {'item2', 'item4', 'item1', 'item3'} - 顺序是随机的,因为集合在一般情况下是无序的
示例:
fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}
我们可以使用 union() 或 update() 方法来合并两个集合。
- Union 这个方法返回一个新集合
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2)
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
print(fruits.union(vegetables)) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}
- Update 这个方法将一个集合插入到给定的集合中
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st1.update(st2) # st2 的内容被添加到 st1 中
示例:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
fruits.update(vegetables)
print(fruits) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}
交集返回两个集合中都存在的项的集合。请参见示例
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}
示例:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.intersection(even_numbers) # {0, 2, 4, 6, 8, 10}
python = {'p', 'y', 't', 'h', 'o', 'n'}
dragon = {'d', 'r', 'a', 'g', 'o', 'n'}
python.intersection(dragon) # {'o', 'n'}
一个集合可以是另一个集合的子集或超集:
- 子集: issubset()
- 超集: issuperset
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1) # True
st1.issuperset(st2) # True
示例:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.issubset(even_numbers) # 错误,因为它是超集
whole_numbers.issuperset(even_numbers) # 正确
python = {'p', 'y', 't', 'h', 'o', 'n'}
dragon = {'d', 'r', 'a', 'g', 'o', 'n'}
python.issubset(dragon) # 错误
它返回两个集合之间的差异。
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.difference(st1) # set()
st1.difference(st2) # {'item1', 'item4'} => st1\st2
示例:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.difference(even_numbers) # {1, 3, 5, 7, 9}
python = {'p', 'y', 't', 'o', 'n'}
dragon = {'d', 'r', 'a', 'g', 'o', 'n'}
python.difference(dragon) # {'p', 'y', 't'} - 结果是无序的(集合的特性)
dragon.difference(python) # {'d', 'r', 'a', 'g'}
它返回两个集合之间的对称差异。它意味着它返回一个包含两个集合中所有项的集合,除了同时出现在两个集合中的项,数学上:(A\B) ∪ (B\A)
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
# 意思是 (A\B)∪(B\A)
st2.symmetric_difference(st1) # {'item1', 'item4'}
示例:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
some_numbers = {1, 2, 3, 4, 5}
whole_numbers.symmetric_difference(some_numbers) # {0, 6, 7, 8, 9, 10}
python = {'p', 'y', 't', 'h', 'o', 'n'}
dragon = {'d', 'r', 'a', 'g', 'o', 'n'}
python.symmetric_difference(dragon) # {'r', 't', 'p', 'y', 'g', 'a', 'd', 'h'}
如果两个集合没有共同的项或项,我们称它们为不相交集合。我们可以使用 isdisjoint() 方法来检查两个集合是否相交。
# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # 错误
示例:
even_numbers = {0, 2, 4, 6, 8}
odd_numbers = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # 正确,因为没有共同项
python = {'p', 'y', 't', 'h', 'o', 'n'}
dragon = {'d', 'r', 'a', 'g', 'o', 'n'}
python.isdisjoint(dragon) # 错误,有共同项 {'o', 'n'}
🌕 你是一颗冉冉升起的明星。你刚刚完成了第 7 天的挑战,你在通往伟大的道路上前进了 7 步。现在为你的大脑和肌肉做一些练习。
# 集合
it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'}
A = {19, 22, 24, 20, 25, 26}
B = {19, 22, 20, 25, 26, 24, 28, 27}
age = [22, 19, 24, 25, 26, 24, 25, 24]
- 找到集合 it_companies 的长度
- 向 it_companies 添加'Twitter'
- 一次性向集合 it_companies 插入多个 IT 公司
- 从集合 it_companies 中移除一家公司
- 移除和丢弃之间有什么区别
- 合并 A 和 B
- 找到 A 和 B 的交集
- A 是 B 的子集吗
- A 和 B 是不相交集合吗
- 将 A 与 B 合并,反之亦然
- A 和 B 之间的对称差异是什么
- 完全删除集合
- 将年龄转换为集合并比较列表和集合的长度,哪一个更大?
- 解释以下数据类型之间的区别:字符串、列表、元组和集合
- 我是一个老师,我喜欢激励和教导人们。 这句句子中用了多少独特的单词?使用 split 方法和集合来获取独特的单词。
🎉 恭喜! 🎉