侧边栏壁纸
博主头像
LittleAO的学习小站 博主等级

在知识的沙漠寻找绿洲

  • 累计撰写 125 篇文章
  • 累计创建 27 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Python的Set类型详解

LittleAO
2023-04-05 / 0 评论 / 0 点赞 / 11 阅读 / 0 字
温馨提示:
本文最后更新于2023-11-13,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

资料来源于Github项目**30-Days-Of-Python,本文为第七章翻译。**

集合(Set)类型

集合是一组元素。让我们回到您的小学或高中数学课。数学上的集合定义也可以应用于Python。集合是一组无序且不可索引的唯一元素。在Python中,集合用于存储唯一的项目,并且可以在集合之间找到联合、交集、差集、对称差集、子集、超集和不相交集。

创建一个集合

我们使用花括号 {} 来创建一个集合,或者使用set()内置函数。

  • 创建一个空Set
# 语法
st = {}
# 或者
st = set()

  • 创建具有初始项的Set
# 语法
st = {'item1', 'item2', 'item3', 'item4'}

示例:

# 语法
fruits = {'banana', 'orange', 'mango', 'lemon'}

获取Set长度

我们可以使用len()方法来获取一个Set的长度。

# 语法
st = {'item1', 'item2', 'item3', 'item4'}
len(set)

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
len(fruits)

访问Set中的元素

我们可以使用循环来访问Set中的元素。这将在循环部分中介绍。

检查元素

要检查一个元素是否存在于一个Set中,我们可以使用成员运算符in

# 语法
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # 集合st是否包含元素item3? True

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
print('mango' in fruits ) # True

Set中添加元素

一旦创建了一个Set,我们就不能更改其中的任何元素,但是我们可以添加额外的元素。

  • 使用add()方法添加一个元素。
# 算法
st = {'item1', 'item2', 'item3', 'item4'}
st.add('item5')

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')

  • 使用update()方法添加多个元素

    update()方法允许向Set中添加多个元素,该方法需要一个列表作为参数。

# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)

Set中移除元素

我们可以使用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()

清空Set中的元素

如果我们想要清空Set中的元素,可以使用clear()方法。

# 语法
st = {'item1', 'item2', 'item3', 'item4'}
st.clear()

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()

删除Set

如果我们想要删除Set本身,可以使用del运算符。

# 语法
st = {'item1', 'item2', 'item3', 'item4'}
del st

示例:

fruits = {'banana', 'orange', 'mango', 'lemon'}
del fruits

List转换为Set

我们可以将List转换为Set,也可以将Set转换为List。将List转换为Set可以去除重复项,只保留唯一的元素。

# 语法
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'}

合并Set

我们可以使用union()方法或update()方法合并两个Set

  • 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'}

查找交集元素

交集返回两个Set中都存在的元素集合。请参考下面的示例:

# 语法
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) # False, 因为它是一个超集
whole_numbers.issuperset(even_numbers) # True

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.issubset(dragon)     # False

查找两个Set的差集

difference()方法返回两个Set的差集。

# 语法
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'}

查找两个Set的对称差集

symmetric_difference()方法返回两个集合的对称差集。也就是说,它返回一个集合,其中包含两个集合中所有的元素,除了同时存在于两个集合中的元素,数学上表示为:(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'}

检查相交Set

如果两个集合没有共同的元素,我们称它们为不相交集。我们可以使用isdisjoint()方法检查两个集合是否相交或不相交。

# 语法
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # False

even_numbers = {0, 2, 4 ,6, 8}
even_numbers = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # True, 没有相同项

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.isdisjoint(dragon)  # False, 有相同项 {'o', 'n'}

0

评论区