📜  Python中Set的内部工作

📅  最后修改于: 2022-05-13 01:55:39.743000             🧑  作者: Mango

Python中Set的内部工作

Python中的 Set及其工作Set 可以定义为项目的集合。在Python中,这些基本上用于包括成员资格测试和消除重复条目。这里使用的数据结构是散列,这是一种在平均 O(1) 中执行插入、删除和遍历的流行技术。 Hash Table 上的操作有些类似于 Linked List。 Python中的集合是删除了重复元素的无序列表。

集合的基本方法是:-

创建集合:- 在Python中,集合是通过 set()函数创建的。将创建一个空列表。请注意,不能通过 {} 创建空 Set,它会创建字典。

检查项目是否在 :此操作的时间复杂度平均为 O(1)。然而,在最坏的情况下,它可能变成 O(n)。

添加元素:- set 中的插入是通过 set.add()函数完成的,其中创建适当的记录值以存储在哈希表中。与检查项目相同,即平均 O(1)。然而,在最坏的情况下,它可能变成 O(n)。

Union :- 可以使用 union()函数或 | 合并两个集合运算符。访问和遍历这两个哈希表值,并对它们执行合并操作以组合元素,同时删除重复项。其时间复杂度为 O(len(s1) + len(s2)),其中 s1 和 s2 是需要合并的两个集合。

Intersection :- 这可以通过 intersection() 或 &运算符来完成。公共元素被选中。它们类似于对哈希列表的迭代并在两个表上组合相同的值。其时间复杂度为 O(min(len(s1), len(s2)),其中 s1 和 s2 是需要合并的两个集合。

差异:- 找出集合之间的差异。类似于在链表中查找差异。这是通过 difference() 或 – 运算符完成的。求差 s1 – s2 的时间复杂度为 O(len(s1))

对称差异:- 在两个集合中查找除公共元素外的元素。使用 ^运算符。 s1^s2 的时间复杂度为 O(len(s1))

Symmetric Difference Update :返回一个包含两个集合的对称差的新集合。时间复杂度为 O(len(s2)) clear :- 清除集合或哈希表。

时间复杂度来源: Python Wiki

如果多个值存在于同一索引位置,则将该值附加到该索引位置,以形成链接列表。其中,CPython 集是使用带有虚拟变量的字典来实现的,其中键是成员集,对时间复杂度进行了更大的优化。设置实施:-
在单个 HashTable 上设置许多操作:- 例子:

# empty set, avoid using {} in creating set or dictionary is created
x = set() 

# set {'e', 'h', 'l', 'o'} is created in unordered way
B = set('hello') 

# set{'a', 'c', 'd', 'b', 'e', 'f', 'g'} is created
A = set('abcdefg') 

# set{'a', 'b', 'h', 'c', 'd', 'e', 'f', 'g'} 
A.add('h')    

fruit ={'orange', 'banana', 'pear', 'apple'}

# True  fast membership testing in sets
'pear' in fruit      

'mango' in fruit     # False

A == B       # A is equivalent to B

A != B       # A is not equivalent to B

A <= B    # A is subset of B A = B    

A > B     # A is proper superset of B

A | B        # the union of A and B

A & B     # the intersection of A and B

A - B        # the set of elements in A but not B

A ˆ B        # the symmetric difference

a = {x for x in A if x not in 'abc'}   # Set Comprehension