十六·集合

我们来讲一下最后一个比较有用的数据类型——集合


  • 集合是一个无序的,元素不重复的序列
  • 可以使用大括号{}set()来标识
  • 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

例子:

my_set = {1, 2, 3, 4, 1, 2, 3, 4}

my_set_2 = my_set

print(my_set)

print(my_set_2)

结果为:

{1, 2, 3, 4}

{1, 2, 3, 4}

从上面的例子中,我们可以看出,虽然我们在创建集合的时候,是可以指定出带有重复元素的集合。

但是不管我们是直接打印,还是先赋值给别的变量再打印,我们最终的一个结果,一定是一个不带有重复元素的集合。


我们可以看到,集合使用了大括号,字典也是大括号。

区别在于,字典的元素是“键值对”,而集合的元素就是一个一个的数据类型。


集合:基本操作

  • add添加元素

add()函数将元素添加到集合中,如果元素已存在,则不进行任何操作。

但是只能添加单个元素,不能添加其他数据类型,比如字典列表就会报错。

例子:

my_set = {1, 2, 3}

my_set.add(1)

print("添加元素1后的集合为:{}".format(my_set))

my_set.add(4)

print("添加元素1后的集合为:{}".format(my_set))

my_set.add({4})

结果为:

添加元素1后的集合为:{1, 2, 3}

添加元素1后的集合为:{1, 2, 3, 4}

Traceback (most recent call last):

 File "C:/Users/xxx/PycharmProjects/untitled/Test/test.py", line 4, in

my_set.add({4})

TypeError: unhashable type: 'set' 

  • update添加元素

update()函数也可以添加元素,且参数可以是列表,元组,字典等

例子:

my_set = {1, 2, 3}

my_set.update({11})

print("添加元素后的集合为:{}".format(my_set))

my_set.update([11, 33])

print("添加元素后的集合为:{}".format(my_set))

my_set.update([1, 3123], {34, 4})

print("添加元素后的集合为:{}".format(my_set))

结果为:

添加元素后的集合为:{11, 1, 2, 3}

添加元素后的集合为:{1, 2, 3, 33, 11}

添加元素后的集合为:{1, 2, 3, 33, 34, 4, 11, 3123}

需要注意的是,不管要添加的类型是什么,都是将其中的元素直接添加到集合中,所以,如果集合中已经存在了相应的元素,就不会做什么操作,没有的话才会添加。

  • remove删除元素

remove()函数将元素从集合中移除,如果元素不存在,则会发生错误

例子:

my_set = {1, 2, 3}

my_set.remove(1)

print("删除元素后的集合为:{}".format(my_set))

my_set.remove(4)

print("删除元素后的集合为:{}".format(my_set))

结果为:

删除元素后的集合为:{2, 3}

Traceback (most recent call last):

 File "C:/Users/xxx/PycharmProjects/untitled/Test/test.py", line 4, in

my_set.remove(4)

KeyError: 4

  • discard删除元素

discard()函数也可以用来删除元素,跟remove的区别在于,discard在删除不存在的元素时,不会报错。

例子:

my_set = {1, 2, 3}

my_set.discard(1)

print("删除元素后的集合为:{}".format(my_set))

my_set.discard(4)

print("删除元素后的集合为:{}".format(my_set))

结果为:

删除元素后的集合为:{2, 3}

删除元素后的集合为:{2, 3}

  • pop随便删除元素

pop()函数用于随机删除集合中的一个元素。

例子:

my_set = {1, 2, 3, 4, 6}

my_set.pop()

print("删除元素后的集合为:{}".format(my_set))

my_set.pop()

print("删除元素后的集合为:{}".format(my_set))

结果为:

删除元素后的集合为:{2, 3, 4, 6}

删除元素后的集合为:{3, 4, 6}

  • clear清空集合

clear()函数用于清空集合中的所有元素

例子:

my_set = {1, 2, 3, 4, 6}

my_set.clear()

print("清空元素后的集合为:{}".format(my_set))

结果为:

清空元素后的集合为:set()

  • len计算集合元素个数

len()用于计算集合中元素的个数

例子:

my_set = {1, 2, 3, 4, 6}

print("集合中的元素个数为:{}".format(len(my_set)))

结果为:

集合中的元素个数为:5

  • in成员判断

in用于判断元素是否存在于集合中

例子:

my_set = {1, 2, 3, 4, 6}

print(1 in my_set)

print({1, 2} in my_set)

print(7 in my_set)

结果为:

True

False

False

  • copy()函数使用方法跟列表字典的copy也是一样的,因为集合也是可变类型
  • difference差集

difference()函数返回包含在第一个集合中,但不包含在第二个集合中的元素

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

print(my_set_1.difference(my_set_2))

结果为:

{1, 2, 3}

  • difference_update

difference_update() 函数用于移除两个集合中都存在的元素。

difference_update() 函数与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

print(my_set_1.difference_update(my_set_2))

print(my_set_1)

结果为:

None

{1, 2, 3}

  • intersection交集

intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {4, 11, 22}

print(my_set_1.intersection(my_set_2,my_set_3))

结果为:

{4}

  • intersection_update

intersection_update() 方法用于获取两个或更多集合中都重叠的元素,即计算交集。

intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {4, 11, 22}

print(my_set_1.intersection_update(my_set_2,my_set_3))

print(my_set_1)

结果为:

None

{4}

  • isdisjoint

isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有相同的元素返回 True,否则返回 False。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {11, 22}

print(my_set_1.isdisjoint(my_set_2))

print(my_set_1.isdisjoint(my_set_3))

结果为:

False

True

  • issubset

issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。

也就是判断当前集合是否为另一个集合的子集

例子:

my_set_1 = {1, 2, 3}

my_set_2 = {1, 2, 3, 4, 5, 6, 7, 8}

my_set_3 = {11, 22}

print(my_set_1.issubset(my_set_2))

print(my_set_1.issubset(my_set_3))

结果为:

True

False

  • issuperset

issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。

也就是判断另一个集合是否为当前集合的子集

例子:

my_set_1 = {1, 2, 3, 4, 5, 6, 7, 8}

my_set_2 = {1, 2, 3}

my_set_3 = {11, 22}

print(my_set_1.issuperset(my_set_2))

print(my_set_1.issuperset(my_set_3))

结果为:

True

False

  • symmetric_difference

symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {11, 22}

print(my_set_1.symmetric_difference(my_set_2))

print(my_set_1.symmetric_difference(my_set_3))

结果为:

{1, 2, 3, 6, 7, 8}

{1, 2, 3, 4, 5, 11, 22}

  • symmetric_difference_update

symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

此函数没有返回值。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {11, 22}

print(my_set_1.symmetric_difference_update(my_set_2))

print(my_set_1)

print(my_set_1.symmetric_difference_update(my_set_3))

print(my_set_1)

结果为:

None

{1, 2, 3, 6, 7, 8}

None

{1, 2, 3, 6, 7, 8, 11, 22}

  • union并集

union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。

例子:

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

my_set_2 = {4, 5, 6, 7, 8}

my_set_3 = {11, 22}

print(my_set_1.union(my_set_2))

print(my_set_1.union(my_set_3))

结果为:

{1, 2, 3, 4, 5, 6, 7, 8}

{1, 2, 3, 4, 5, 22, 11}

注:部分方案转自菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值