python数据结构之set的用法详解

上一节中,我们讨论了Python字典(Dictionary)的用法,在本节我们讨论python中的集合set的用法。在Python中,Set是一个无序的数据类型集合,它是可迭代的、可变的,没有重复的元素。集合set中元素的顺序是未定义的,尽管它可能由各种元素组成。
与python的列表list相比,使用集合的主要优点是,它有一个高度优化的方法来检查集合中是否包含特定的元素。
1、创建一个集合set可以使用内置的set()函数创建集合set,其中包含一个可迭代的对象或一个序列,方法是将序列放在花括号中,用逗号分隔。
请注意,set不能将list、set或dictionary等可变元素作为其元素。

# 创建一个集合set set1 = set() print("初始化空set: ") print(set1) # 使用一个字符串创建一个集合set set1 = set("GeeksForGeeks") print("\n字符串集合set: ") print(set1) # 使用构造函数创建一个集合set # (使用对象储存字符串) String = 'GeeksForGeeks' set1 = set(String) print("\n使用构造函数和对象创建集合: " ) print(set1) # 使用一个list创建set set1 = set(["Geeks", "For", "Geeks"]) print("\n使用list创建set: ") print(set1)

一个集合只包含唯一的元素,但是在创建集合时,也可以传递多个重复的值。集合中元素的顺序没有定义,也不能改变。集合中元素的类型不必相同,也可以将各种混合的数据类型值传递给集合。
# 使用一个数字list创建set # (含有重复的数字) set1 = set([1, 2, 4, 4, 3, 3, 3, 6, 5]) print("\n使用list创建set: ") print(set1) # 使用混合类型值创建set # (含有数字和字符串) set1 = set([1, 2, 'Geeks', 4, 'For', 6, 'Geeks']) print("\n使用混合类型创建set") print(set1)

2、添加元素到集合set中可以使用内置的add()函数将元素添加到集合中。通过使用add()方法一次只能添加一个元素到集合中,循环使用add()方法一次添加多个元素。
注意:列表list不能作为元素添加到集合中,因为列表是不可散列化的,而元组可以添加,因为元组是不可变的,因此是可散列化的。
# 创建一个集合Set set1 = set() print("初始化空集合: ") print(set1) # 向集合中添加元素和元组 set1.add(8) set1.add(9) set1.add((6,7)) print("\n添加3个元素后的集合: ") print(set1) # 使用迭代器向集合添加元素 for i in range(1, 6): set1.add(i) print("\n添加元素后的集合: ") print(set1)

对于两个或多个元素的添加,使用update()方法。update()方法接受列表list、字符串、元组以及其他集合作为它的参数,在所有这些情况下,避免了重复的元素。
# 使用update()函数向集合添加元素 set1 = set([ 4, 5, (6, 7)]) set1.update([10, 11]) print("\n使用update添加元素后的集合: ") print(set1)

3、访问和遍历集合set集合set的数据项不能通过引用索引来访问,因为Set是无序的,所以这些项没有索引。但是你可以使用for循环遍历集合项,或者使用关键字查询集合中是否存在指定的值。
# 创建一个集合 set1 = set(["Geeks", "For", "Geeks"]) print("\n初始化集合") print(set1) # 循环迭代遍历集合 print("\n遍历集合的元素: ") for i in set1: print(i, end=" ") # 使用关键字访问元素 print("Geeks" in set1)

4、从集合set中删除元素可以使用内置的remove()函数从集合中删除元素,但是如果集合中不存在元素,则会出现KeyError。
# 创建一个集合 set1 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) print("初始集合: ") print(set1) # 使用remove删除集合元素 set1.remove(5) set1.remove(6) print("\n删除两个元素后的集合: ") print(set1) # 使用discard删除集合元素 set1.discard(8) set1.discard(9) print("\n使用discard删除元素后: ") print(set1) # 使用迭代的方式删除集合元素 for i in range(1, 5): set1.remove(i) print("\n使用迭代方式删除元素后: ") print(set1)

pop()函数也可以用来从集合中删除和返回一个元素,但是它只删除集合的最后一个元素。注意,如果集合是无序的,那么没有办法通过使用pop()函数来确定哪个元素是弹出的。
# 创建一个集合 set1 = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) print("初始集合: ") print(set1) # 使用pop从set中删除元素 # Set using the pop() method set1.pop() print("\n删除元素后的集合: ") print(set1)

【python数据结构之set的用法详解】要从集合中删除所有元素,使用clear()函数。
# 创建一个集合 set1 = set([1,2,3,4,5]) print("\n初始集合: ") print(set1) # 使用clear清空集合 set1.clear() print("\n清空集合后: ") print(set1)

Python中的冻结集是不可变的对象,它只支持生成结果而不影响其应用的冻结集或冻结集的方法和操作符。虽然可以随时修改集合的元素,但冻结集合的元素在创建后保持不变。
# 创建一个集合 String = ('G', 'e', 'e', 'k', 's', 'F', 'o', 'r') Fset1 = frozenset(String) print("冻结集: ") print(Fset1) # 打印空的冻结集,不传递任何参数 print("\n空冻结集: ") print(frozenset())

5、python集合set的所有操作函数
函数 说明
add() 添加一个元素到集合中
remove() 移除一个元素,元素不在集合中则产生KeyError
clear() 从集合中删除所有元素
copy() 返回一个集合的浅拷贝
pop() 移除并返回任意的集合元素,集合为空,则引发KeyError
update() 使用自身和其他的并集更新集合
union() 返回新集合中集合的并集
difference() 将两个或多个集合的差作为一个新集合返回
difference_update() 从这个集合中移除另一个集合的所有元素
discard() 若元素是成员,则移除该元素,否则不作操作
intersection() 以新集合的形式返回两个集合的交集
intersection_update() 用自身与别的集合的交集更新集合
isdisjoint() 如果两个集合的交集为空,则返回True
issubset() 如果另一个集合包含此集合,则返回True
issuperset() 如果这个集合包含另一个集合,则返回True
symmetric_difference() 将两个集合的对称差作为一个新集合返回
symmetric_difference_update() 更新具有自身和别的结合的对称差异的集合

    推荐阅读