python内置的集合set中元素顺序_python基础教程:set(集
合)
Python集合(set),是⼀个很有意思的数据结构。从形式上看,它像字典有key但没有value,它的写法是这样的s = {'a', 'b', 'c'},是不是像⼀个没有value的字典?另⼀⽅⾯,它⼜像是⼀个⽤花括号替换了⽅括号的列表,但它不能像列表那样⽤索引访问元素。
其实,Python集合在内部实现上就是⼀个没有value的字典,所以它跟字典很像。既然和字典很像,那么还要集合⼲什么?集合主要⽤来⼲什么呢?
集合主要⽤于测试⼀个对象是不是在⼀堆对象集⾥⾯,也就是in运算。这个功能其实列表也可以,⽐如1 in [2,3,4,5],但是⽤列表的速度远远低于集合,尤其是在这⼀堆对象的数量⾮常⼤时。
列表因为是顺序存储的,它的查时间复杂度是O(n),⽽集合是⽤hash table实现的,其时间复杂度是O(1)。
Python集合(set)的创建
集合可以通过set()来创建⼀个空集合,也可以把⼀个列表转换为集合。类似字典那样在花括号内可以放⽤逗号,隔开的多个对象:
In [1]: s = set()
南通php程序员最新招聘信息In [2]: type(s)
Out[2]: set
In [3]: set([1,2,3,4,5])
Out[3]: {1, 2, 3, 4, 5}
In [4]: set([1,2,3,3,5])
Out[4]: {1, 2, 3, 5}
In [5]: s = {'a', 'd', 'e', 'c', 'b'}
In [6]: s2 = {1, 'a', True}
In [7]: s = {'a', 'a', 'a'}
In [8]: s
Out[8]: {'a'} # 字典⾥⾯的元素不能重复
跟字典的键不能是可变对象⼀样,集合⾥⾯也不能是列表、集合、字典:
前端displayIn [9]: s = {'a', [1,2]}
------------------------
TypeError Traceback (most recent call last)
in
----> 1 s = {'a', [1,2]}
TypeError: unhashable type: 'list'
In [10]: s = {'a', {'a':1}}
---------------------------
TypeError Traceback (most recent call last)
in
----> 1 s = {'a', {'a':1}}
TypeError: unhashable type: 'dict'
Python集合(set)的访问
集合不能像列表那样通过索引访问内部某⼀个元素,只能通过遍历访问全部元素,或通过变量名访问整个集合:In [13]: s = {'a', 'b', 'c'}
In [14]: s
Out[14]: {'a', 'b', 'c'}
In [15]: for x in s:
...: print(x)
...:
a
c
b
集合相关的内置函数
Python内置了⼀些函数可以⽤于操作集合,它们是:
len()
返回集合的长度,即集合包含的元素的个数。空集合的长度是0
In [41]: len({'a', 'b'})
Out[41]: 2
In [42]: len(set())
Out[42]: 0
any()和all()
类似于对列表、tuple的操作。
any(): 只要集合有⼀个元素为True则返回True;
all(): 只有集合的所有元素都为True才返回True;
In [45]: any({'', 0, False})
Out[45]: False
In [46]: all({'', 0, False})
linux进入oracle数据库Out[46]: False
In [47]: all({'a', 0:, False})
Out[47]: False
In [48]: any({'a', 0:, False})
Out[48]: True
In [49]: any(set())
Out[49]: False
In [50]: all(set())
Out[50]: True
跟空字典⼀样,它却认为是所有元素都为True,all(set())返回True。sorted()
跟操作列表、tuple的效果⼀样,它把集合的所有元素进⾏排序
In [51]: sorted({'a', 'c', 'b'})
Out[51]: ['a', 'b', 'c']
in 运算符
跟列表,元组⼀样,in⽤来检验⼀个对象是不是在集合中:
In [56]: 'a' in {'a', 'c', 'b'}
Out[56]: True
In [57]: '3' in {'a', 'c', 'b'}
Out[57]: False
In [58]: '3' not in {'a', 'c', 'b'}
Out[58]: True
遍历集合:
In [59]: for k in {'a', 'c', 'b'}:
...: print(key)
...:
a
c
b
集合的内置⽅法:
(1)add(x)
把对象x添加到集合中。
In [25]: s = {'a', 'b', 'c'}
In [26]: s.add(1)
In [27]: s
Out[27]: {1, 'a', 'b', 'c'}
ajax牙椅使用说明(2)update()
把多个对象添加到集合中。
In [28]: s.update([1,2,3])
In [29]: s
Out[29]: {1, 2, 3, 'a', 'b', 'c'}
In [30]: s.update(['x', 'y'], {7,8,0})
In [31]: s
Out[31]: {0, 1, 2, 3, 7, 8, 'a', 'b', 'c', 'x', 'y'}
(3)discard(x) 和 remove(x)
这两个都是从集合中删除⼀个元素x。不同的是,如果x不在集合中,discard()会忽略;⽽remove()会抛出KeyError的错误:
In [32]: s
Out[32]: {0, 1, 2, 3, 7, 8, 'a', 'b', 'c', 'x', 'y'}
In [33]: s.discard(0)
In [34]: s.remove(1)
In [35]: s
Out[35]: {2, 3, 7, 8, 'a', 'b', 'c', 'x', 'y'}
In [36]: s.discard('z')
In [37]: s.remove('z')
----------------------
KeyError Traceback (most recent call last)
in
----> ve('z')
KeyError: 'z'
(4)pop()
类似字典的pop()和列表的pop(),都是从其中删除⼀个元素并返回该元素。因为集合没有key和索引的概念,所以集合的pop()不带参数。
(5)clear()
清空⼀个集合
In [40]: s
Out[40]: {2, 3, 7, 8, 'a', 'b', 'c', 'x', 'y'}
In [41]: s.clear()
In [42]: s
Out[42]: set()
(6)copy()
跟字典的copy()⼀样,返回⼀个集合的深拷贝。
In [44]: s = {'a', 'b', 'c'}
In [45]: s2 = s.copy()
In [46]: s2
Out[46]: {'a', 'b', 'c'}
In [47]: s.add(1)
In [48]: s
Out[48]: {1, 'a', 'b', 'c'}
In [49]: s2
Out[49]: {'a', 'b', 'c'}
(7)union()
求两个或多个集合的并集,即把这些集合的所有元素放在⼀起组成新的集合并返回。它不改变原来的集合。
In [51]: s1, s2, s3 = {1,2,3}, {4,5,6}, {6,7,8}
In [52]: s1.union(s2)
Out[52]: {1, 2, 3, 4, 5, 6}
In [53]: s1
Out[53]: {1, 2, 3}
In [54]: s1.union(s2, s3)
Out[54]: {1, 2, 3, 4, 5, 6, 7, 8}
(8)intersection()
求两个或多个集合的交集,即把这些集合中共同含有的元素放在⼀起组合成新的集合并返回。同样它也不改变原来的集合。
In [55]: s1.intersection(s2)
Out[55]: set()
In [56]: s2.intersection(s3)
Out[56]: {6}
In [57]: s1.intersection(s2, s3)
Out[57]: set()
(10)difference()
求⼀个集合S与另⼀个或多个集合的差集,即把只包含在集合S却不在做⽐较的集合中的元素组成新的集合并返回,同样它也不改变原来的集合。相当于集合的减法。
In [58]: s1.difference(s2)
电脑cancelOut[58]: {1, 2, 3} # 返回s1包含却不在s2中的元素组成的集合: s1 - s2
In [59]: s2.difference(s1)
Out[59]: {4, 5, 6} # s2包含,s1不包含: s2 - s1
In [60]: s2.difference(s3)
Out[60]: {4, 5} # s2包含,s3不包含: s2 - s3
In [61]: s2.difference(s3, s1)
python基础教程pdf电子书Out[61]: {4, 5} # s2包含,s3,s1都不包含: s2 - s3 - s1
(11)symmetric_difference()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论