page contents

探索Python集合:掌握核心操作与技巧!

本文讲述了探索python集合:掌握核心操作与技巧!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-03-x5lE6sjz660656769b7d3.png本文讲述了探索python集合:掌握核心操作与技巧!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

Python中的集合(set)是一种无序且不包含重复元素的数据结构。以下是一些常见的Python集合操作方法:

1. 创建集合:可以使用大括号{}或set()函数来创建一个集合。

s1 = {1, 2, 3}

s2 = set([4, 5, 6])

2. 添加元素:使用add()方法可以向集合中添加一个元素,如果要添加多个元素,则可以使用update()方法。

s = {1, 2, 3}

s.add(4)  # s现在是{1, 2, 3, 4}

s.update([5, 6])  # s现在是{1, 2, 3, 4, 5, 6}

3. 移除元素:可以使用remove()方法删除指定元素,或使用discard()方法(当元素不存在时不会引发异常)。另外,pop()方法可以随机删除并返回一个元素。

s = {1, 2, 3, 4, 5, 6}

s.remove(1)  # s现在是{2, 3, 4, 5, 6}

s.discard(7)  # 尝试删除不存在的元素,s仍然是{2, 3, 4, 5, 6}

element = s.pop()  # 随机删除一个元素并返回它

4. 集合运算:集合支持并集、交集、差集等运算。

s1 = {1, 2, 3, 4}

s2 = {3, 4, 5, 6}

union_set = s1 | s2  # 并集,结果是{1, 2, 3, 4, 5, 6}

intersection_set = s1 & s2  # 交集,结果是{3, 4}

difference_set = s1 - s2  # 差集(s1中存在但s2中不存在的元素),结果是{1, 2}

5. 判断元素是否存在:使用in关键字可以判断一个元素是否在集合中。

s = {1, 2, 3, 4, 5}

if 3 in s:

    print("3在集合s中")

6. 清空集合:使用clear()方法可以清空集合中的所有元素。

s = {1, 2, 3, 4, 5}

s.clear()  # s现在是set()

7. 获取集合的元素个数:使用len()函数可以获取集合中的元素个数。

s = {1, 2, 3, 4, 5}

print(len(s))  # 输出5

8. 迭代集合:可以使用循环结构来迭代集合中的每个元素。

s = {1, 2, 3, 4, 5}

for element in s:

    print(element)

9. 集合的对称差集:对称差集是指两个集合中不重复的元素集合。在Python中,可以使用^运算符或symmetric_difference()方法来实现。

s1 = {1, 2, 3, 4}

s2 = {3, 4, 5, 6}

symmetric_difference_set = s1 ^ s2  # 对称差集,结果是{1, 2, 5, 6}

# 或者使用方法

symmetric_difference_set_method = s1.symmetric_difference(s2)  # 结果同上

10. 判断集合是否为子集或超集:可以使用issubset()方法来判断一个集合是否是另一个集合的子集,使用issuperset()方法来判断一个集合是否是另一个集合的超集。

s1 = {1, 2}

s2 = {1, 2, 3, 4}

print(s1.issubset(s2))  # 输出True,因为s1是s2的子集

print(s2.issuperset(s1))  # 输出True,因为s2是s1的超集

11. 集合的并集更新: update()方法不仅可以添加多个元素到集合中,它实际上执行的是并集操作。如果传入的参数是另一个集合,它会将该集合中的所有元素添加到原始集合中。

s1 = {1, 2, 3}

s2 = {3, 4, 5}

s1.update(s2)  # s1现在是{1, 2, 3, 4, 5},相当于执行了并集操作

12. 集合的不可变性:需要注意的是,集合本身是可变的(mutable),这意味着你可以添加、删除或更改集合中的元素。但是,集合中的元素必须是不可变的(immutable),这意味着你不能将列表或其他可变类型作为集合的元素。尝试这样做会导致TypeError。

# 合法的操作

s = {1, 2, 3}

s.add(4)  # 添加元素到集合中

# 非法的操作

s = {[1, 2], 3}  # TypeError: unhashable type: 'list'

13. 冻结集合:如果你需要一个不可变的集合类型,可以使用frozenset。它是一个不可变的、无序的、不重复元素的集合。

fs = frozenset([1, 2, 3, 4])

# fs现在是一个不可变的集合,你不能添加或删除其中的元素

14. 集合推导式:与列表推导式类似,你也可以使用集合推导式来快速创建集合。

s = {x**2 for x in range(5)}  # 创建一个包含0到4的平方的集合,结果是{0, 1, 4, 9, 16}

15. 集合的复制:可以使用copy()方法来复制一个集合,这样可以避免原始集合和复制后的集合引用相同的对象。

s1 = {1, 2, 3}

s2 = s1.copy()  # 复制集合s1到s2

# 或者使用内置的copy模块

import copy

s3 = copy.copy(s1)  # 同样复制集合s1到s3

请注意,copy()执行的是浅复制(shallow copy),如果集合中包含复合对象(如列表或类实例),则复制后的集合中的元素仍然是对原始对象的引用。对于深复制(deep copy),需要使用copy.deepcopy()。

但是,由于集合只能包含不可变对象,因此实际上在集合中存储复合对象是不可能的(会导致TypeError)。所以,在集合的上下文中,通常不需要担心深复制的问题。

16. 集合的迭代和遍历:除了使用for循环来迭代集合中的元素外,还可以使用集合的迭代器方法iter()来获取一个迭代器对象,然后使用next()函数来逐个访问集合中的元素。

s = {1, 2, 3}

it = iter(s)

print(next(it))  # 输出集合s中的一个元素(顺序是随机的)

print(next(it))  # 输出集合s中的下一个元素(顺序是随机的)

# ...直到StopIteration异常被抛出,表示迭代完成

请注意,由于集合是无序的,因此每次迭代时元素的顺序可能会不同。

17. 集合作为字典的键:由于集合是可变的,它们不能用作字典的键。但是,如果你需要一个集合类型的键,可以使用frozenset,因为它是不可变的。

# 创建一个以frozenset为键的字典

d = {frozenset([1, 2, 3]): 'value'}

print(d[frozenset([1, 2, 3])])  # 输出:'value'

18. 集合的哈希性:与列表不同,集合本身是不可哈希的,这意味着你不能将集合用作字典的键或其他需要哈希值的地方。但是,frozenset是可哈希的,因此可以用作字典的键。

19. 集合的排序:由于集合是无序的,它们不能直接排序。但是,你可以将集合转换为列表,然后对列表进行排序。如果集合包含的元素类型本身支持排序(如整数或字符串),则可以使用sorted()函数来获得一个排序后的列表。

s = {3, 1, 2}

sorted_list = sorted(s)  # 返回一个排序后的列表[1, 2, 3]

20. 集合的并集、交集、差集和对称差集的原地操作:除了使用|、&、-和^运算符以及相应的union()、intersection()、difference()和symmetric_difference()方法来计算并返回新的集合之外,还可以使用带有update()、intersection_update()、difference_update()和symmetric_difference_update()方法的原地操作来更新原始集合。

s1 = {1, 2, 3}

s2 = {2, 3, 4}

s1.update(s2)           # s1现在是{1, 2, 3, 4}(并集原地操作)

s1.intersection_update(s2) # s1现在是{2, 3}(交集原地操作)

s1.difference_update(s2)   # s1现在是set()(差集原地操作,但在此之前s1已被修改,所以结果不准确)

# 通常在使用差集原地操作之前,你需要确保s1和s2有共同的元素或者重新给s1赋值

s1 = {1, 2, 3}

s1.symmetric_difference_update(s2) # s1现在是{1, 4}(对称差集原地操作)

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg


  • 发表于 2024-03-29 13:49
  • 阅读 ( 41 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1316 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章