如何找出同时买了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
>>>