Python基础(06)——集合(set、frozenset)
集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示。
1.set的定义
创建集合:集合种的集合项可以是不同数据类型的元素。
创建集合有俩种方法,1.将集合直接赋值给变量 2.使用set()集合创建函数来创建集合
thisset = {"apple","orange","banana"}
thisset = set(("apple","orange","banana"))
因为集合是无序的,所以无法显示集合项的显示顺序。所输出的序列为任意序列
2. 访问集合项
因为set是无序的,无法通过索引访问集合项,但是可以使用for循环遍历集合项
thisset = {"apple","orange","banana"}
for x in thisset:
print(x)
#---output---
# banana
# orange
# apple
可以用**“in”**关键字检查集合项中是否有指定的集合项
print("banana" in thisset) #True
3. 更改集合项
集合一旦创建不可以更改其集合项。但是可以添加新的集合项,或者删除集合项。
3.1 添加新集合项
在集合中添加新的集合项有两种方法:
1.通过add()方法,可添加一个集合项
2.通过update()方法,可以添加多个集合项
thisset.add("cherry")
thisset.update("1","2") #此方法必须传入字符串类型参数
3.2 删除集合项
删除集合项有三种方法
1.使用remove()方法删除指定的集合项
2.使用discard()方法删除指定的集合项
3.使用pop()方法删除最后一个集合项。因为集合是无序的,所以并不知道删除的是哪一项。所以此方法的返回值就是删除的集合项。
thisset = {'banana', '2', 'apple', 'cherry', '1', 'orange'}
thisset.remove("1")
thisset.discard("2")
print(thisset) # {'banana', 'apple', 'cherry', 'orange'}
print(thisset.pop()) # banana
在删除集合项时,若集合中没有此集合项,其中remove()将会引发KeyError错误,discard()方法不执行删除操作。
4.set常用方法
add() | 向集合添加元素。 |
---|---|
clear() | 删除集合中的所有元素。 |
copy() | 返回集合的副本。 |
difference() | 返回包含两个或更多集合之间差异的集合。 如: set = set1.different(set2) 查看并返回在set1种但不在set2中的集合,并未将其删除。 |
difference_update() | 删除此集合中也包含在另一个指定集合中的项目。 如:set1.different_update(set2) 删除set1中两个集合都存在的项目 |
discard() | 删除指定项目。 |
intersection() | 返回为两个其他集合的交集的集合。 如:set1.intersection(set2) 返回新集合,其中包含在set1中和set2中的项目集合 |
intersection_update() | 删除此集合中不存在于其他指定集合中的项目。 如:set1.intersection_update(set2) 在set1中删除set1和set2都互不存在的项目 |
isdisjoint() | 返回两个集合是否有交集。 如:set1.isdisjoint(set2) 没有交替返回True |
issubset() | 返回另一个集合是否包含此集合。 如:set1.issubset(set2) 检查set2中是否包含set1的所有集合项,是返回True,否则返回False |
issuperset() | 返回此集合是否包含另一个集合。 如:set1.issuperset(set2)检查set2中的所有集合项是否都存在与set1中,如果是是返回True。 |
pop() | 从集合中删除一个元素。 |
remove() | 删除指定元素。 |
symmetric_difference() | 返回具有两组集合的对称差集的集合。 set1.symmetric_difference(set2) 返回新集合,其中包含两个集合中的所有项目,但不包含两个集合中都存在的项目。 |
symmetric_difference_update() | 插入此集合和另一个集合的对称差集。 set1.symmetric_difference_update(set2) 在set1中插入set2中有set1没有,并删除两者都有的集合项, |
union() | 返回包含集合并集的集合。 set1.union(set2) 将set1的set2的并集 返回新集合 |
update() | 用此集合和其他集合的并集来更新集合。 set1.union(set2) 是在set1中插入set2有但是set1没有的集合项 |
具体操作如下
set1 = {"a","b","c","d"}
set2 = {"a","b","1","2"}
#一下操作均是在set1 = {"a","b","c","d"} set2 = {"a","b","1","2"}的基础进行操作
print(set1.difference(set2))
set1.difference_update(set2)
print(set1)
print(set1.intersection(set2))
set1.intersection_update(set2)
print(set1)
print(set1.isdisjoint(set2))
print(set1.issubset(set2))
print(set1.issuperset(set2))
print(set1.symmetric_difference(set2))
set1.symmetric_difference_update(set2)
print(set1)
print(set1.union(set1))
set1.update(set2)
print(set1)
#---output---
# {'c', 'd'}
# {'d', 'c'}
# {'a', 'b'}
# {'b', 'a'}
# False
# False
# False
# {'2', 'c', 'd', '1'}
# {'c', '1', 'd', '2'}
# {'a', 'd', 'b', '1', '2', 'c'}
# {'b', 'd', '2', 'a', 'c', '1'}
5.set和frozenset的区别
不同点:
1.set集合是可变序列集合,frozenset集合是不可变的序列集合,frozenset集合相当于一个冻结的集合,可以作为字典的键。
2.set集合中能改变集合本省的方法,如pop,remove,discard、add方法,frozenset均不支持。
3.set集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算
4.创建方式不同,frozenset使用圆括号和方括号创建集合
f_set = frozenset(["5",1,2,3])
for f in f_set:
print(f)
共同点:
- for循环可以遍历frozenset集合
- 关键字in可以检查集合项
f_set = frozenset(["5",1,2,3])
for f in f_set:
print(f)
if 1 in f_set:
print("Yes")
#---output---
#5
#1
#2
#3
#Yes