2-13集合类型

如何找出同时买了IPhone7和8的人?

iphone7 = ['alex','rain','jack','old_driver']
iphone8 = ['alex','shanshan','jack','old_boy']

both_list = []

for name in iphone7:
   if name in iphone8:
       both_list.append(name)

print(both_list)
        

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数组之前的交集、差集、并集等关系
>>> s= {1,2,3,2,4,5} #创建集合
>>> s
{1, 2, 3, 4, 5}  #只有一个2
>>>
>>> s.add(2)    #添加重复的2也加不进去
>>> s.add(44)
>>> s
{1, 2, 3, 4, 5, 44}
>>> s.update([2,3,4,5,5,99])  #把多个值加入到集合
>>> s
{1, 2, 3, 4, 5, 99, 44}
>>> s.discard(1) #删除元素,没有也不报错
>>> s.pop()   #随便删除一个元素,集合为空的话会报错
2
>>> s.pop()
3
>>> s
{4, 5, 99, 44}
>>>

>>> s.clear()  #清空
>>> s
set()
>>> s.add(1)
>>> s.copy()
{1}
>>> s.add([1,2,3])   #只能添加不可变数据
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'                                                         

集合关系测试

  • 交集
  • 差集
  • 并集

>>> iphone7 = {'alex','rain','jack','old_driver'}
>>> iphone8 = {'alex','jack','shanshan','old_boy'}

并集

>>> iphone7.intersection(iphone8)
{'jack', 'alex'}
>>> iphone7 & iphone8
{'jack', 'alex'}

差集

>>> iphone7.difference(iphone8)
{'rain', 'old_driver'}
>>> iphone7 - iphone8
{'rain', 'old_driver'}

并集

>>> iphone8.union(iphone7)
{'old_boy', 'jack', 'shanshan', 'rain', 'old_driver', 'alex'}
>>> iphone8 | iphone7
{'old_boy', 'jack', 'shanshan', 'rain', 'old_driver', 'alex'}

对称差集:只买了iphone7 或 只买了iphone8 的人,及取差集的反

>>> iphone8.symmetric_difference(iphone7)
{'old_boy', 'rain', 'shanshan', 'old_driver'}
>>> iphone8 ^ iphone7
{'old_boy', 'rain', 'shanshan', 'old_driver'}
>>>

包含关系

in, not in:判断元素是否在集合内 ==, !=判断两个集合是否相等

两个集合之间一般由三种关系,相交、包含、不相交。

set.isdisjoint(s) :判断两个集合是不是不相交

set.issuperset(s):判断集合是不是包含其他集合,等同于 a >= b

set.issubset(s):判断集合是不是属于其他集合,等用于 a <=b

>>> s
{1, 2, 3, 4}
>>> s2
{2, 3, 5, 6}
>>> s2.add(1)
>>> s2.add(4)
>>> s2
{1, 2, 3, 4, 5, 6}
>>> s.issubset(s2)
True
>>> s2.issuperset(s)
True
>>>

猜你喜欢

转载自www.cnblogs.com/echo-kid-coding/p/11222943.html