定义
集合是无序可变序列,与字典一样使用一对花括号作为界定符,同一个集合的元素之间不允许重复,集合中每个元素都是唯一的。
集合创建与删除
将集合赋值给变量即可创建一个集合对象(内置sorted()方法,可以原地排序)。
>>> a={7,8}
>>> a.add(9)
>>> a
{8, 9, 7}
也可以使用set()函数将列表、元组等其他可迭代对象转化为集合,如果faunlike数据中存在重复元素,则在转换为集合的时候只保留一个。
>>> a_set=set(range(8,14))
>>> a_set
{8, 9, 10, 11, 12, 13}
>>> b_set=set([10,9,0,2,5,4,7,8,0,4,7,8])
>>> b_set
{0, 2, 4, 5, 7, 8, 9, 10}
>>> x=set() #空集合
>>> x
set()
删除
可以使用集合对象的add()方法增加元素,使用del()命令删除整个集合,使用pop()方法弹出并删除一个元素,使用remove()方法直接删除集合中指定元素,使用clear()方法清空集合删除所有元素。
>>> a={4,7,3,9,1,2}
>>> a #已经排序
{1, 2, 3, 4, 7, 9}
>>> a.pop() #从最小的开始删除
1
>>> a
{2, 3, 4, 7, 9}
>>> a.remove(4)
>>> a
{2, 3, 7, 9}
>>> a.pop(3) #pop()方法不接受参数
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
集合操作
python集合支持交集、并集、差集等运算。
>>> a_set=set([8,9,10,11,12])
>>> b_set=set([0,1,2,3,7,8])
>>> a_set | b_set #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12}
>>> a_set.union(b_set) #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12}
>>> a_set & b_set #交集
{8}
>>> a_set.intersection(b_set) #交集
{8}
>>> a_set.difference(b_set) #差集
{9, 10, 11, 12}
>>> b_set.difference(a_set) #差集
{0, 1, 2, 3, 7}
>>> a_set - b_set #差集
{9, 10, 11, 12}
>>> a_set.symmetric_difference(b_set) #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12}
>>> a_set ^ b_set #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12}
>>> a={1,2,3}
>>> b={1,2,4}
>>> c={1,2,3,4,5}
>>> a<b #比较集合大小
False
>>> a.issubset(b) #测试a是否为b的子集
False
>>> a.issubset(c)
True
提取序列中所有不重复的元素(去重):
>>> from random import randint
>>> listRandom=[randint(0,9999) for i in range(100)] #100个介于0-9999之间的随机数
>>> newSet=set(listRandom) #使用集合去重元素
集合应用案例
生成不重合随机数,集合可以获得较高的执行效率。
>>> import random
>>> import time
>>> def RandomNumber(number, start, end):
'''使用集合生成number个介于start和end之间的数'''
dat=set()
while True:
data.add(random.randint(start,end))
if len(data) == number:
break
return data
start=time.time()
for i in range(10000):
RandomNumber(50,1,100)
print("TimeUsed:",time.time()-start)