07. 集合
1. 集合介绍
集合(set)是一个元素不可重复的无序的序列。
s = {1, "a", (1, 2)}
- 集合在创建时,会自动删除重复的元素。
- 可以使用花括号{}或set()函数创建集合。但注意若要创建空集合只能使用set(),因为{}默认创建的是空字典。
- 无法使用索引访问集合的元素。
- 集合的元素只能是不可变类型。
- 集合对象还支持union(联合),intersection(交),difference(差)、sysmmetric_difference(对称差集)等数学运算。
2. 集合的常用操作
创建
>>> # 方式一 >>> {1, "a", "a", (1, 2)} {1, ‘a‘, (1, 2)} >>> # 方式二:使用set()函数 >>> set() # 创建空集合 set() >>> set({1, 2, 3}) # 传入集合 {1, 2, 3} >>> set((1, 2, 3)) # 传入元组 {1, 2, 3} >>> set({1:2}) # 传入字典,仅返回键 {1} >>> set([1, 2]) # 传入列表 {1, 2} >>> set("abc") # 传入字符串 {‘c‘, ‘a‘, ‘b‘} >>> set("www") {‘w‘}
- copy():拷贝一个新的集合(新的内存地址)。
>>> s {1, 2, 3, 4} >>> a = s.copy() >>> a {1, 2, 3, 4} >>> s {1, 2, 3, 4} >>> id(a) 30777096 >>> id(s) 30776984
增
add():s.add(x) 将对象x增加到集合s中,若已存在该元素,不进行任何操作。
update():s.update(x) 也可以增加元素,增加对象还可以是列表、元组、字典等(逐个拆解其元素增加到集合中),x可以为多个对象。
>>> s = {1, 2} >>> s.add(3) >>> s {1, 2, 3} >>> s.add((4, 5)) # 添加一个元组作为元素 >>> s {(4, 5), 1, 2, 3} >>> s.update([6, 7]) # 拆解列表元素并添加 >>> s {1, 2, 3, 6, 7, (4, 5)} >>> s.add([6, 7]) # add()无法添加可变类型 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: ‘list‘ >>> s.update({11:10}) # 仅添加键 >>> s {1, 2, 3, 6, 7, 11, (4, 5)} >>> s.update((4, 5)) # 拆解元组元素并添加 >>> s {1, 2, 3, 4, 5, 6, 7, 11, (4, 5)} >>> s.update([20, 21], (22, 23)) # 传入多个对象 >>> s {1, 2, 3, 4, 5, 6, 7, 11, (4, 5), 20, 21, 22, 23}
删
remove():s.remove(x) 将元素x从集合s中删除,若元素x不存在则返回异常。
discard():类似于remove(),但若元素不存在并不会返回异常。
pop():随机删除一个元素,并返回该元素。
- clear():清空集合所有的元素。
>>> s = {1, 2, 3, 4, 5} >>> s.remove(5) >>> s {1, 2, 3, 4} >>> s.remove(5) # 元素不存在,报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 5 >>> s.discard(5) # 元素不存在,但不报错 >>> s {1, 2, 3, 4} >>> s.pop() 1 >>> s.clear() >>> s set()
3. 集合间的运算
>>> {1, 2} & {2, 3} # 交集。等价于 {1, 2}.intersection({2, 3}) {2} >>> {1, 2} | {2, 3} # 并集。等价于 {1, 2}.union({2, 3}) {1, 2, 3} >>> {1, 2} - {2, 3} # 左集合元素不存在于右集合中的元素 {1} >>> {1, 2} ^ {2, 3} # 左右集合不同时存在的元素 {1, 3}
相关推荐
yogoma 2020-01-11
kuoying 2019-12-23
SarahHShen 2019-06-26
刘利新西安 2019-02-28
PainLove 2018-07-30
JackLang 2018-07-30
lispython 2016-05-23
python0 2019-04-17
typhoonpython 2020-06-12
up0 2020-04-22
lickylin 2020-04-19
angqiuli 2020-02-18
MLXY 2020-01-11
rongxionga 2019-12-31
duanlove技术路途 2019-12-28
liuxiaocong 2019-11-23