Python入门(10)——集合

集合的创建

集合是由不重复元素组成的无序容器。创建集合用{}大括号或set()函数。注意,创建空集合只能用set(),不能用{}{}创建的是空字典。下面的例子演示了如何创建一个集合以及创建空集合。

>>> numbers = {0, 1, 2, 3, 4, 5}    # 用大括号创建集合
>>> print(numbers)
{0, 1, 2, 3, 4, 5}
>>> type(numbers)
<class 'set'>

>>> letters = set('abcdefg')        # 用set()函数创建集合
>>> print(letters)
{'g', 'd', 'b', 'c', 'f', 'e', 'a'}
>>> type(letters)
<class 'set'>

>>> emptySet = set()                # 创建空集合
>>> print(emptySet)
set()
>>> type(emptySet)
<class 'set'>

往集合里添加元素

使用add()方法,可以往集合里添加元素。因为集合是存储无序不重复元素的容器,所以当要存入的元素已经在集合里面时,不做任何操作;当元素不存在集合里面时,才进行插入操作。下面的例子演示了如何把元素添加到集合里面。

>>> numbers = {0, 1, 2}
>>> print(numbers)
{0, 1, 2}
>>> numbers.add(3)  # 往集合里面添加元素3
>>> print(numbers)  # 元素3之前未在集合里,添加成功
{0, 1, 2, 3}
>>> numbers.add(0)  # 往集合里面添加元素0
>>> print(numbers)  # 元素0已经在集合里,不进行添加
{0, 1, 2, 3}

当然,使用update()方法,也可以往集合里添加元素。用法与add()方法类似,但add()方法不能往集合里面添加列表、元组、字典等元素,而update()方法可以。下面的例子演示了如何把列表添加到集合里面。

>>> numbers = {0, 1, 2}
>>> numbers.add([3, 4])     # 使用add()方法添加不了列表
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    numbers.add([3, 4])
TypeError: unhashable type: 'list'
>>> numbers.update([3, 4])  # 使用update()方法可以添加列表
>>> print(numbers)
{0, 1, 2, 3, 4}

从集合中删除指定元素

使用remove()方法,可以将指定元素从集合中删除。如果集合中不存在此元素,则会报错。

>>> numbers = {0, 1, 2}
>>> numbers.remove(0)   # 从集合中删除元素0
>>> print(numbers)
{1, 2}
>>> numbers.remove(3)   # 从集合中删除不存在的元素则报错
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    numbers.remove(3)
KeyError: 3

当然,我们更推荐使用discard()方法删除集合中指定元素,因为如果集合中不存在此元素,系统不会报错。

>>> numbers = {0, 1, 2}
>>> numbers.discard(0)  # 从集合中删除元素0
>>> print(numbers)
{1, 2}
>>> numbers.discard(3)  # 从集合中删除不存在的元素没有报错
>>> print(numbers)
{1, 2}

从集合中删除元素并返回其值

使用pop()方法,可以将集合中的某个元素删除,并且返回其值。如果集合为空,则会报错。

  • 如果集合的元素都是数字,删除时,删掉的是最小的数字,其余数字升序排列;
  • 如果集合的元素都是非数字,删除时,删掉的是随机的元素,其余元素随机排列。
  • 如果集合里既有数字又有非数字元素,删除时:若删掉的是数字,则一定是删掉了最小的,其他数字升序排列,非数字元素随机排列;若删掉的非数字,则一定是随机删掉了一个,其他数字升序排列,非数字元素随机排列。
>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> x = numbers.pop()
>>> print(x)
0
>>> print(numbers)
{1, 2, 3, 4, 5, 6}

获取集合中元素的个数

使用len()函数,可以求得集合中元素的个数。

>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> len(numbers)
7

删除集合中的所有元素

使用clear()方法,可以将集合元素清空。

>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> numbers.clear()
>>> print(numbers)
set()

判断元素是否在集合中

使用in或者not in操作符,可以判断元素是否在指定集合中。下面的例子演示了如何判断元素是否在集合中。

>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> 1 in numbers
True
>>> 10 in numbers
False

集合的复制

使用copy()方法,可以复制集合。下面的例子演示了如何复制集合。

>>> numbers = {0, 1, 2}
>>> x = numbers.copy()
>>> print(x)
{0, 1, 2}
>>> id(x)
2122843999136
>>> id(numbers)
2122843998912

求并集

使用union()方法可以求出多个集合的并集,重复的元素只会出现一次。下面的例子演示了如何求出两个集合的并集。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.union(y)
>>> print(z)
{0, 1, 2, 3, 4, 5}

求差集

使用difference()方法可以求出两个集合的差集,即返回的集合元素包含在调用该方法的集合中而不包含在作为参数的集合中。下面的例子演示了如何求出两个集合的差集。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.difference(y)
>>> print(z)
{0, 1}

使用difference_update()方法也可以求出两个集合的差集,只不过这个方法会直接对原始集合进行操作,求得的差集会直接覆盖原始集合。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.difference_update(y)
>>> print(x)
{0, 1}

求交集

使用intersection()方法可以求出多个集合的交集,即返回的集合元素既包含在调用该方法的集合中又包含在作为参数的集合中。下面的例子演示了如何求出两个集合的交集。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.intersection(y)
>>> print(z)
{2, 3}

使用intersection_update()方法也可以求出多个集合的交集,只不过这个方法会直接对原始集合进行操作,求得的交集会直接覆盖原始集合。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.intersection_update(y)
>>> print(x)
{2, 3}

求对称差集

使用symmetric_difference()方法可以求对称差集,即返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.symmetric_difference(y)
>>> print(z)
{0, 1, 4, 5}

使用symmetric_difference_update()方法也求对称差集,只不过这个方法会直接对原始集合进行操作,求得的对称差集会直接覆盖原始集合。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.symmetric_difference_update(y)
>>> print(x)
{0, 1, 4, 5}

判断两个集合中是否存在相同的元素

使用isdisjoint()方法可以判断两个集合中是否存在相同的元素。如果不存在相同的元素,则返回True;存在相同的元素,则返回False。

>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.isdisjoint(y)
False
>>> a = {0, 1}
>>> b = {2, 3}
>>> a.isdisjoint(b)
True

判断是否为子集

使用issubset()方法可以判断当前集合是否为参数集合的子集。如果当前集合是参数集合的子集,则返回True;否则返回False。

>>> x = {0, 1}
>>> y = {0, 1, 2, 3}
>>> x.issubset(y)
True

判断是否为超集

使用issuperset()方法可以判断当前集合是否为参数集合的超集。如果当前集合是参数集合的超集,则返回True;否则返回False。

>>> x = {0, 1}
>>> y = {0, 1, 2, 3}
>>> y.issuperset(x)
True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值