1.7. 集合 Set()

set()函数可以将列表转换为集合

可以用于去重复数据

1.7.1. 1.集合的方法

s.update(t)                         # 用t中的元素修改s,s现在包含s或t的成员   s |= t
s.intersection_update(t)            # s中的成员是共用属于s和t的元素          s &= t
s.difference_update(t)              # s中的成员是属于s但不包含在t中的元素    s -= t
s.symmetric_difference_update(t)    # s中的成员更新为那些包含在s或t中,但不是s和t共有的元素  s ^= t
s.add(obj)                          # 在集合s中添加对象obj
s.remove(obj)                       # 从集合s中删除对象obj;如果obj不是集合s中的元素(obj not in s),将引发KeyError错误
s.discard(obj)                      # 如果obj是集合s中的元素,从集合s中删除对象obj
s.pop()                             # 删除集合s中的任意一个对象,并返回它
s.clear()                           # 删除集合s中的所有元素
s.issubset(t)                       # 如果s是t的子集,则返回True   s <= t
s.issuperset(t)                     # 如果t是s的超集,则返回True   s >= t
s.union(t)                          # 合并操作;返回一个新集合,该集合是s和t的并集   s | t
s.intersection(t)                   # 交集操作;返回一个新集合,该集合是s和t的交集   s & t
s.difference(t)                     # 返回一个新集合,改集合是s的成员,但不是t的成员  s - t
s.symmetric_difference(t)           # 返回一个新集合,该集合是s或t的成员,但不是s和t共有的成员   s ^ t
s.copy()                            # 返回一个新集合,它是集合s的浅复制
obj in s                            # 成员测试;obj是s中的元素 返回True
obj not in s                        # 非成员测试:obj不是s中元素 返回True
s == t                              # 等价测试 是否具有相同元素
s != t                              # 不等价测试
s < t                               # 子集测试;s!=t且s中所有元素都是t的成员
s > t                               # 超集测试;s!=t且t中所有元素都是s的成员

1.1 交集、并集、差集、对称差集

代码示例1

#集合的创建
set1 = {"水瓶座","射手座","双鱼座","双子座"}    #定义了一个集合,集合和字典一样,是无序的
print(set1)                                     #因为是无序的,所以无法通过索引来获取

set2 = {"水瓶座","射手座","双鱼座","双子座","水瓶座"}  #去重复了
print(set2)


python = {"hujianli1","hujianli2","hujianli3","hujianli4","xiaojian1"}
C = {"xiaojian1","xiaojian2","xiaojian3","xiaojian4"}
print(python | C)   #求并集
print(python & C)   #求交集

代码示例2

#!/usr/bin/env python
#-*- coding:utf8 -*-

"""
交集      &
并集      |
差集      -
"""

python = set(["hujianli1","hujianli2",'hujianli3','hujianli4','jianli4'])
C = set(['hujianli1','jianli1','jianli2','jianli3','jianli4'])

print("选择python学生名字:", python)
print("选择C学生的名字:", C)

print("交集运算:",python & C)       #既选择python语言又选择C语言
print("并集运算:",python | C)       #参与选课的全部学生名字
print("差集运算:",python - C)       #python语言和C语言的差集

1.7.2. 2.集合的修改和删除

代码示例3

#!/usr/bin/env python
#-*- coding:utf8 -*-
mr = set(['零基础学JAVA','零基础学Android',"零基础学PHP",'零基础学C语言'])    #定义一个集合
mr.add("零基础学python")        #向集合当中添加元素,会自动删除重复的元素
print(mr)

mr.pop()    #随机删除元素
#print(mr)


if "零基础学JAVA" in mr:
    mr.remove("零基础学JAVA")   #移除集合的元素
print(mr)


mr.clear()                      #清空整个集合
print(mr)


# del mr                        #删除整个集合
# print(mr)


#-------------------------------------------------
# python新增jianli3,C减去jianli3
#--------------------------------------------------
python = set(["hujianli","xiaojian","xiaojian2","xiaojian3"])
C = set(["jianli1","jianli2","jianli3","jianli4"])
python.add("jianli3")
C.remove("jianli3")
print(python)
print(C)

1.7.3. 3. 不可变集合

集合是一种可变类型,使用.add()方法可以向集合追加新成员,可使用内置类型frozenset,它和普通set非常像,只是少了所有的修改类方法:

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/17 23:08
# filename: 不可变集合.py
student_set = frozenset({"张三", "李四", "王五"})
print(student_set)
print(type(student_set))

# 报错,不能被修改
# print(student_set.add("胡六"))

# 不可变报错
try:
    student_set.add("懂事")
except:
    print("error")

a = (12, 13, 14, 15)
seta = frozenset(a)
print(seta)     #frozenset({12, 13, 14, 15})

1.7.4. 4.各容器数据类型区别

#!/usr/bin/env python
#-*- coding:utf8 -*-
list = []
tuple = ()
dict = {}
set = set()


#是否可变
'''
列表、字典、集合可变
元祖不可变
'''


#是否重复
'''
可重复:列表、元祖、字典
不可重复:集合
'''




#是否有序
'''
列表、元祖 有序
字典、集合 无序
'''