Python中集合的内部工作

布景及其制作 用Python设置 可以定义为项目的集合。在Python中,这些基本上用于包括成员身份测试和消除重复条目。本文中使用的数据结构是 散列 ,这是一种在O(1)中平均执行插入、删除和遍历的常用技术。哈希表上的操作与链表类似。python中的集合是无序列表,删除了重复的元素。

null

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

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

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

协会 :-可以使用union()函数或|运算符合并两个集合。如果两个元素都被访问,并在同一个哈希表上执行合并操作,则两个元素都被删除。其时间复杂度为O(len(s1)+len(s2)),其中s1和s2是需要进行并集的两个集合。

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

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

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

对称差分更新 :返回包含两个集合的对称差的新集合。时间复杂度为O(len(s2))

清楚的 :-清除集合或哈希表。

时间复杂度来源: Python维基

如果同一索引位置存在多个值,则该值将附加到该索引位置,以形成一个链表。在中,CPython集合是使用带有虚拟变量的字典实现的,其中关键是成员集合对时间复杂度进行了更大的优化。

设置实现:- 图片[1]-Python中集合的内部工作-yiteyi-C++库 在单个哈希表上执行多个操作的集合:-

图片[2]-Python中集合的内部工作-yiteyi-C++库

例如:

# 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>= 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
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享