集合

1.集合的作用

集合的作用就是更好的存取数据。

2.集合的关系运算
friends1 = ["zero","kevin","jason","egon"]
friends2 = ["Jy","ricky","jason","egon"]
#取交集:两者共同的好友
l=[]
for x in friends1:
    if x in friends2:
        l.append(x)
print(l)
#效果等同于
res=friends1 & friends2
print(res)
3.定义
在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
  1. 集合内元素必须为不可变类型
  2. 集合内元素无序
  3. 集合内元素没有重复
  4. ps: s={} # 默认是空字典 s=set()#可以定义空集合

4.类型转换

1.字符串转化集合

res=set('hellolllll')
print(res)
#{'l', 'e', 'o', 'h'}
#ps:集合可去除重复,且有无序性。

2.字典转化集合

print(set({'k1':1,'k2':2}))
#{'k1', 'k2'}
#ps:字典只取key

3.列表转化集合

print(set([1,2,3,4,5,6])) #{1, 2, 3, 4, 5, 6}
print(set([1,1,1,1,1,1,[11,222]]) # 报错
ps:集合内不可以包含可变类型

5.内置方法

1.取交集

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}
res=friends1 & friends2
print(res)
#{'jason', 'egon'}

print(friends1.intersection(friends2)) #intersection效果类似与&

2.取并集/合集:两者所有的好友

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}
print(friends1 | friends2)
print(friends1.union(friends2))
#{'kevin', 'egon', 'Jy', 'zero', 'jason', 'ricky'}
#两种方法都可以

3.取差集:取friends1独有的好友

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}
print(friends1 - friends2)
print(friends1.difference(friends2))
#{'kevin', 'zero'} 
#两种方法都可以

4.对称差集: 求两个用户独有的好友们(即去掉共有的好友)

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}
print(friends1 ^ friends2)
print(friends1.symmetric_difference(friends2))
#{'Jy', 'kevin', 'ricky', 'zero'}

5.父子集:包含的关系

s1={1,2,3}
s2={1,2,4}
# 不存在包含关系,下面比较均为False
print(s1 > s2)
print(s1 < s2)
s1={1,2,3}
s2={1,2}
print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2他爹 True
print(s1.issuperset(s2))  # 判断s2是否是s1的爹 True
print(s2.issubset(s1)) # 判断s2是否是s1的儿 True

互为父子集

s1={1,2,3}
s2={1,2,3}
print(s1 == s2) # s1与s2互为父子
print(s1.issuperset(s2))
print(s2.issuperset(s1))
# True
# True
# True

6.去重

1.只能针对不可变类型去重

print(set([1,1,1,1,2])) # {1, 2}

2.无法保证原来的顺序

l=[1,'a','b','z',1,1,1,2]
l=list(set(l))
print(l)
# 顺序随机

3.列表的去重操作

l=[
    {'name':'lili','age':18,'sex':'male'},
    {'name':'jack','age':73,'sex':'male'},
    {'name':'tom','age':20,'sex':'female'},
    {'name':'lili','age':18,'sex':'male'},
    {'name':'lili','age':18,'sex':'male'},
]
new_l=[]
for dic in l:
    if dic not in new_l:
        new_l.append(dic)
print(new_l)
#[{'name': 'lili', 'age': 18, 'sex': 'male'}, {'name': 'jack', 'age': 73, 'sex': 'male'}, {'name': 'tom', 'age': 20, 'sex': 'female'}]

7.其他通用操作

1.长度

>>> s={'a','b','c'}
>>> len(s) # 3

2.成员运算

>>> s={'a','b','c'}
>>> 'c' in s
True

3.循环

s={'a','b','c'}
for item in s:
    print(item)

8.需要掌握的内置方法

1.discard

s={1,2,3}
s.discard(4) # 删除元素不存在do nothing(兼容性好)
print(s)
# s.remove(4) # 删除元素不存在则报错

2.update

s={1,2,3}
s.update({1,3,5})
print(s)
#{1, 2, 3, 5}

3.pop

s={1,2,3}
res=s.pop()
print(res)
#1

4.add

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

9.其余了解性方法

1.isdisjoint()

s={1,2}
res=s.isdisjoint({3,4,5,6}) # 判断两个集合是否独立、有没有共同部分,返回布尔值
print(res) #True

2.difference_update()

s={1,2,3}
s.difference_update({3,4,5}) # 返回对象中没有的值(集合的形式)
print(s) # {1, 2}
原文地址:https://www.cnblogs.com/bailongcaptain/p/12481943.html