Python札记10_集合set
2019-06-18 本文已影响0人
皮皮大
集合
set
是Python
中的另一种数据类型,用{ }
括起来表示,里面是单个的对象,不是键值对。集合的特点是里面的元素有的可变,有的不可变;元素无次序,元素不可重复。集合set可以说是列表和字典的杂合。
- 元素无序
- 元素是不可变,可哈希的
- 自动去重
- 集合没有索引,不属于序列
- 空集合只能通过
set()
方法进行创建
创建集合set
创建集合有两种方式:
- 通过
set()
函数创建 - 通过
{ }
直接进行创建 - 创建空集合一定要用set方法,否则Python会认为是字典
set创建
如果有重复的元素会自动进行过滤,一种高效的去重方式:
s1 = set("peter")
print(s1)
{'p', 't', 'e', 'r'}
{ }创建
同样的会自动去重创建,由于{ }
已经使用在字典中,不建议使用
s2 = {"p", "e", "t", "e", "r"}
print(s2)
{'t', 'r', 'e', 'p'}
frozenset()
通过set
创建的集合都是可变,不可哈希的集合;通过frozenset
创建的是不可变的集合
哈希和不可哈希
哈希hashable
:不可变的,例如字符串、整数型、布尔值等,字典的键必须是不可变的
不可哈希unhashable
:可变的,例如列表、字典等,利用set()创建的集合是可变集合
集合set
的方法
方法 | 作用 |
---|---|
add() | 给一个集合增加元素,参数只能有一个:集合与元素 |
update | 用原有集合自身个其他东西构成的新集合,来更新原来的集合 |
pop | 随机删除一个元素,返回元素本身;不能指定参数,不能指定删除某个元素 |
remove(obj) |
obj 必须是集合set 中的元素,否则报错;没有返回值
|
discard(obj) |
obj 如果在集合中就执行删除,否则不进行任何操作,与remove 不同 |
clear() | 删除所有元素,bool(set) 为False
|
# add
s3 = set()
s3.add("peter") # 一次只能增加一个元素
print(s3)
s4 = set("python")
s4.add("xiaoming")
# s4.add('[1, 2, 3]') 报错:列表是可变,不可哈希的;但集合中的元素必须是不可变的,可哈希的
print(s4)
{'peter'}
{'h', 'p', 'o', 't', 'y', 'xiaoming', 'n'}
# update
s3.update(s4) # 将s4中的元素合并到s3中
print(s3)
{'n', 'xiaoming', 'peter', 'y', 'p', 'h', 't', 'o'}
s4.update("goo")
print(s4)
{'xiaoming', 'y', 't', 'p', 'g', 'h', 'n', 'o'} # 注意结果的去重
s4.update((2, 3))
print(s4)
{2, 3, 't', 'g', 'xiaoming', 'p', 'n', 'h', 'y', 'o'}
集合运算
- 元素和集合关系:判断元素是否在集合中:in
- 集合与集合的关系:
- 两个集合是否相等
==
- 超集
B.issuperset(A)
、B>A
和子集A.issubset(B)
、A<B
关系 - 并集:
A.union(B)
或者使用|
:得到新的集合,原来的集合不变 - 交集:
A.intersection(B)
或者使用&
- 差集:
A.difference(B)
或者A-B
,(A
中存在,B
中不存在的元素) - 对称差集:
A.symmetric_difference(B)
,(A,B
的并集除去A,B
的交集)