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