Python笔记精讲之集合set

定义

集合是无序可变序列,与字典一样使用一对花括号作为界定符,同一个集合的元素之间不允许重复,集合中每个元素都是唯一的。

集合创建与删除

将集合赋值给变量即可创建一个集合对象(内置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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值