2023/1/14python学习笔记(集合)

1创建集合

创建集合的三种方法

1使用花括号,元素之间以逗号分隔{"Fishc","Python"}

2使用集合推导式:{s for s in "Fishc"}

3使用类型构造器,也就是set():set("FishC")

2集合的随机性

>>> set("FishC")
{'i', 'C', 's', 'F', 'h'}

集合是无序的,所以我们不能使用下标索引的方式去访问

我们可以用 in 和 not in 来判断某个元素是否存在集合中

>>> 'C' in s
True
>>> 'c' not in s
True

3访问集合

如果想要访问

>>> for each in s:
...     print(each)
...
F
h
i
s
C

集合中的元素,可以使用迭代的方式

4集合的必杀技-去重

>>> set([1, 1, 2, 3, 5])
{1, 2, 3, 5}

在实际开发中,我们经常需要去检测一个列表中是否存在相同的元素
那么在没有学习过集合之前,我们很有可能需要通过迭代来统计每个元素出现的次数,从而判断是否唯一……

但是,现在,咱们只需要这么写:

>>> s = [1, 1, 2, 3, 5]
>>> len(s) == len(set(s))
False
>>> s = [1, 2, 3, 5]
>>> len(s) == len(set(s))
True

5集合的方法

列表、元组、字符串、字典它们都有一个 copy() 方法,那么集合也不例外

>>> t = s.copy()
>>> t
{'h', 's', 'i', 'F', 'C'}

如果我们要检测两个集合之间是否毫不相干,可以使用isdisjoint(other)方法:

>>> s.isdisjoint(set("Python"))
False
>>> s.isdisjoint(set("JAVA"))
True

这个方法并不要求必须是集合类型,可以是任何一种可迭代对象:

>>> s.isdisjoint("Python")
False
>>> s.isdisjoint("JAVA")
True

如果我们要检测集合是否为另一个集合的子集,可以使用issubset(other)方法:

>>> s.issubset("FishC.com.cn")
True

如果我们要检测该集合是否为另一个集合的超集,可以使用 issuperset(other) 方法(对于两个集合 A、B,如果集合 B 中任意一个元素都是集合 A 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的超集):

>>> s.issuperset("Fish")
True

除了检测子集和超集,我们还可以计算当前集合和其它对象共同构造的并集、交集、差集以及对称差集。
并集,就是将集合与其它集合的元素合并在一起,组成一个新的集合:

>>> s.union({1, 2, 3})
{1, 2, 3, 'h', 's', 'i', 'F', 'C'}

交集就是找到多个集合之间共同的那些元素

>>> s.intersection("Fish")
{'h', 's', 'i', 'F'}

差集就是存在于该集合,但不存在于其他集合的元素:

>>> s.difference("Fish")
{'C'}

最后一个是求对称差集,就是排除掉 s 集合和 other 容器中共有的元素后,剩余的所有元素,这个只能支持一个参数:

>>> s.symmetric_difference("Python")
{'t', 'y', 'F', 's', 'P', 'C', 'n', 'o', 'i'}

python也提供了相应的运算符,可以直接进行运算

检测子集可以使用小于等于号 (<=)

检测真子集我们可以使用小于号(<)

并集使用管道符(|)

交集使用and符号(&)

差集使用减号(-)

对称差集使用脱字符(^)

6冻结集合

python将集合细分为可变和不可变两种对象,前者是set(),后者是frozenset()

被冻结的集合是不可修改的(frozenset())

7适用于set()对象的方法

update(*other)方法使用others容器中的元素来更新集合

>>> s = set("FishC")
>>> s
{'s', 'C', 'i', 'F', 'h'}
>>> s.update([1, 1], "23")
>>> s
{'s', 1, 'C', 'i', 'F', 'h', '3', '2'}

intersection_update(*others),difference_update(*others) 和 symmetric_difference_update(other) 分别是使用前面讲过的交集、差集和对称差集的方式来更新集合:

>>> s.intersection_update("FishC")
>>> s
{'s', 'C', 'i', 'F', 'h'}
>>> s.difference_update("Php", "Python")
>>> s
{'s', 'C', 'i', 'F'}
>>> s.symmetric_difference_update("Python")
>>> s
{'s', 't', 'C', 'o', 'h', 'i', 'y', 'F', 'n', 'P'}

如果单纯希望往集合里添加数据可以使用add(elem)方法

>>> s.add("45")
>>> s
{'s', 't', 'C', 'o', 'h', 'i', 'y', 'F', '45', 'n', 'P'}

在集合中删除某个元素,可以使用 remove(elem) 或者 discard(elem) 方法:

>>> s.remove("瓦迈")
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    s.remove("瓦迈")
KeyError: '瓦迈'
>>> s.discard("瓦迈")

可以用clear()方法就是将集合清空

>>> s.clear()
>>> s
set()

猜你喜欢

转载自blog.csdn.net/qq_61134394/article/details/128688376
今日推荐