Python的集合类型之set和frozenset详解
什么是集合?
集合(set)是Python中的一种数据类型,用于存储一组互不相同的元素。集合中的元素必须是不可变的(immutable),例如数字,字符串和元组,不能包含可变数据类型(mutable),例如列表、字典和集合本身。
在Python 2.3之前,集合类型是不存在的,只能用列表或字典来模拟集合。在Python 2.3及以后的版本中,集合类型被正式引入到语言中。Python中的集合类型有两种:set和frozenset。
set类型
set类型用大括号{}来创建,中间用逗号分隔每个元素。下面是创建一个set的例子:
st = {1, 2, 3}
print(st) # 打印出 set([1, 2, 3])
需要注意的是,如果只使用一对大括号{}来创建一个空集合,会得到一个空字典而不是一个空集合。因此,要创建一个空集合,应该使用set()函数:
empty_set = set() # 创建一个空集合
print(empty_set) # 打印出 set(),表示一个空集合
set类型的特点是无序且元素不能重复。set中元素的顺序是无法预测的,每次输出结果可能会有所不同,但是元素不会重复。
st = {1, 2, 3, 2, 1}
print(st) # 打印出 set([1, 2, 3]),可以看到重复元素已经被去除
set类型支持所有的数学集合操作,例如合并(union)、交集(intersection)和差集(difference)。
set1 = {1, 3, 5, 7}
set2 = {2, 4, 6, 8}
# union,将两个集合合并,并去除重复元素
union_set = set1.union(set2)
print(union_set) # 打印出 set([1, 2, 3, 4, 5, 6, 7, 8])
# intersection,找到两个集合中都有的元素
intersection_set = set1.intersection(set2)
print(intersection_set) # 打印出 set([])
# difference,返回只属于第一个集合的元素
diff_set = set1.difference(set2)
print(diff_set) # 打印出 set([1, 3, 5, 7])
frozenset类型
frozenset类型是set类型的不可变版本,用法与set类型基本相同,只是一旦创建就无法更改。因此,frozenset类型不能添加、删除或修改元素。frozenset类型也用大括号{}来创建,只需在大括号前加上关键词frozenset即可。
frozenset1 = frozenset([1, 3, 5])
frozenset2 = frozenset([2, 4, 6])
frozenset3 = frozenset([1, 2, 3])
# union,将两个集合合并,并去除重复元素
union_fset = frozenset1.union(frozenset2)
print(union_fset) # 打印出 frozenset([1, 2, 3, 4, 5, 6])
# intersection,找到两个集合中都有的元素
intersection_fset = frozenset1.intersection(frozenset3)
print(intersection_fset) # 打印出 frozenset([1, 3])
# difference,返回只属于第一个集合的元素
diff_fset = frozenset1.difference(frozenset2)
print(diff_fset) # 打印出 frozenset([1, 3, 5])
需要注意的是,frozenset类型虽然是不可变的,但是可以作为set类型的元素使用。
fset1 = frozenset([1, 2, 3])
fset2 = frozenset([4, 5, 6])
# 将frozenset类型作为set类型的元素
set3 = set([fset1, fset2])
print(set3) # 打印出 set([frozenset([1, 2, 3]), frozenset([4, 5, 6])])
总结
- set类型用大括号{}来创建,中间用逗号分隔每个元素,支持所有的数学集合操作。
- frozenset类型是set类型的不可变版本,用法与set类型基本相同,只是一旦创建就无法更改。
- set类型和frozenset类型都不允许重复元素,但是frozenset类型可以作为set类型的元素使用。
我希望这篇攻略能够帮助你理解和使用Python中的集合类型。如果你有任何疑问或建议,请随时与我联系。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的集合类型之set和frozenset详解 - Python技术站