一,集合

  1,集合由不同元素组成

  2,无序

  3,集合中元素必须是不可变类型

 

二,定义集合

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

  2,s = set(hello)以迭代的方式生成集合

s = set("hello")
print(s)

{'o', 'e', 'h', 'l'}

  

三,集合的方法

  1,add添加,如果添加有重复不会报错但是也不会添加

s = {1,2,3}
s.add(4)
print(s)

{1, 2, 3, 4}

  

  2,clear清除

 

  3,copy拷贝

s = {1,2,3}
s1 = s.copy()
print(s)

{1,2,3}

  

  4,pop删除,因为是无序的所以是随机删除

 

  5,remove指定删除,如果指定参数没有则报错不存在KeyError

s = {1,2,3}
s.remove(1)
print(s)

{2,3}

  

  6,discard和remove功能一样不过是假如没有找到关键字不会报错

 

四,集合的运算

  1,并集

  假设有两个列表一个列表列出学习python的学生一个列出学习linux的学生请列出既学习了python的又学习了linux的学生

  通过循环的方法vim day14-2.py

python_l = ['zhangsan','lisi','wangwu']
linux_l = ['zhangsan','lisi']
python_and_linux_l = []
for p_name in python_l:
    if p_name in linux_l:
        python_and_linux_l.append(p_name)
print(python_and_linux_l)

['zhangsan', 'lisi']

  这种方法比较low下面用集合来处理 vim day14-3.py

python_l = ['zhangsan','lisi','wangwu']
linux_l = ['zhangsan','lisi']
#把列表转换成无序的集合
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.intersection(l_s))

print(p_s&l_s)

  使用print(p_s&l_s)更加简单

 

  2,和集

  使用union或者符号

  

  3,差集

  直接使用-号即可,存在于键鼠不存在于被减数中的元素

  p_s - l_s

 

  4,交叉补集symmetric_difference 符号^ 先合集在减去并集就是交叉补集

python_l = ['zhangsan','lisi','wangwu']
linux_l = ['zhangsan','lisi','dage']
#把列表转换成无序的集合
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.symmetric_difference(l_s))

  

  5,difference_update求完差集并更新原集合返回值为None 以下操作相当于p_s = p_s - l_s

python_l = ['zhangsan','lisi','wangwu']
linux_l = ['zhangsan','lisi']
#把列表转换成无序的集合
p_s = set(python_l)
l_s = set(linux_l)
v = p_s.difference_update(l_s)
print(p_s,v)

{'wangwu'} None

  

  6,isdisjoint 两个集合没有交集返回True有交集返回False

s1 = {1,2}
s2 = {3,4}
print(s1.isdisjoint(s2))

True

  

   7,issubset一个集合是否是另外一个集合的子集 如果是返回True如果不是返回False

s1 = {1,2}
s2 = {1,2,3,4}
print(s1.issubset(s2))

True

  

  8,issuperset判断一个集合是否是另外一个集合的父集

 

  9,update并集并且更新和union不同的是union不会更新

s1 = {1,2}
s2 = {1,2,3}
s1.update(s2)
print(s1)

{1,2,3}

  

 五,集合的补充

  

  1,frozenset定义不可变集合

s = frozenset('hello')
print(s)

frozenset({'e', 'h', 'l', 'o'})

  2,列表使用集合的方法去重,但是新生成的列表顺序可能和原列表不同

names = ['zhangsan','zhangsan','lisi']
names = list(set(names))
print(names)

['lisi', 'zhangsan']