Python版本:3.7.0
集合的创建与删除
直接将集合赋值给变量即可创建一个集合对象。
>>> a={3,5}
>>> a.add(7)
>>> a
{3, 5, 7}
也可以使用set()函数将列表、元组等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个。
>>> a_set=set(range(8,14))
>>> a_set
{8, 9, 10, 11, 12, 13}
>>> b_set=set([0,1,2,3,0,1,2,3,7,8])
>>> b_set
{0, 1, 2, 3, 7, 8}
>>> x=set() #空集合
>>> x
set()
add()增加元素
pop()弹出并删除其中第一个元素,不接收参数
remove()直接删除指定元素
clear()清空结合删除所有元素
集合操作
>>> a_set=set([8,8,10,11,12,13])
>>> a_set=set([8,9,10,11,12,13])
>>> b_set=set([0,1,2,3,7,8])
>>> a_set | b_set #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set.union(b_set) #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set & b_set #交集
{8}
>>> a_set.intersection(b_set) #交集
{8}
>>> a_set.difference(b_set) #差集
{9, 10, 11, 12, 13}
>>> a_set - b_set #差集
{9, 10, 11, 12, 13}
>>> a_set.symmetric_difference(b_set) #对称差
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
>>> a_set ^ b_set
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
>>> x={1,2,3}
>>> y={1,2,5}
>>> z={1,2,3,4}
>>> x<y #比较集合大小
False
>>> x<z
True
>>> y<z
False
>>> x.issubset(y) #测试是否为子集
False
>>> x.issubset(z)
True
作为集合的具体应用,可以使用集合快速提取序列中单一元素,即提取出序列中所有不重复元素,如果使用传统方式,则需要编写下面的代码:
>>> from random import randint
>>> listRandom=[randint(0, 9999) for i in range(100)] #100个介于0~9999之间的随机数
>>> noRepeat=[]
>>> for i in listRandom:
if i not in noRepeat:
noRepeat.append(i)
>>> len(listRandom)
>>> len(noRepeat)
如果使用集合,只需要如下一行代码就可以了。
>>> newSet = set(listRandom)
生成不重复随机数的效率比较
import random
import time
def RandomNumbers(number, start, end):
'''使用列表来生成numbe个介于start和end之间的不重复随机数'''
data=[]
n=0
while True:
element=random.randint(start, end)
if element not in data:
data.append(element)
n += 1
if n==number-1:
break
return data
def RandomNumbers1(number, start, end):
'''使用列表来生成numbe个介于stat和end之间的不重复随机数'''
data=[]
while True:
element=random.randint(start, end)
if element not in data:
data.append(element)
if len(data)==number:
break
return data
def RandomNumbers2(number, start, end):
'''使用集合来生成numbe个介于stat和end之间的不重复随机数'''
data=set()
while True:
data.add(random.randint(start, end))
if len(data)==number:
break
return data
start=time.time()
for i in range(10000):
RandomNumbers2(50, 1, 100)
print('Time used: ', time.time()-start)
方法 | 用时 |
---|---|
RandomNumbers | Time used: 1.7229423522949219 |
RandomNumbers1 | Time used: 1.7729105949401855 |
RandomNumbers2 | Time used: 1.4081363677978516 |
集合推导式
>>> {x.strip() for x in ('he', 'she ', ' I' )}
{'he', 'I', 'she'}
>>> import random
>>> x={random.randint(1, 500) for i in range(100)} #生成随机数,自动去除重复元素
>>> len(x) #一般而言输出结果会小于100
参考文献
[1] 董付国. Python程序设计(第2版)[M]. 清华大学出版社. 2019-08. ISBN 978-7-302-43651-5