python set和list

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

应用场景:
list, 简单的数据集合,可以使用索引;
set,数据只出现一次,只关心数据是否出现, 不关心其位置;

下面来点简单的小例子说明把。


>>> x = set('spam')  
>>> y = set(['h','a','m'])  
>>> x, y  
(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))  

再来些小应用。

>>> x & y # 交集  
set(['a', 'm'])  

>>> x | y # 并集  
set(['a', 'p', 's', 'h', 'm'])  

>>> x - y # 差集  
set(['p', 's'])  

去除海量列表里重复元素,用hash来解决也行,只不过感觉在性能上不是很高,用set解决还是很不错的,示例如下:

>>> a = [11,22,33,44,11,22]  
>>> b = set(a)  
>>> b  
set([33, 11, 44, 22])  
>>> c = [i for i in b]  
>>> c  
[33, 11, 44, 22]

很酷把,几行就可以搞定。

考虑到range(500, 1500) 调用了1000次(会比较耗时),改成只调用一次的话,时间从28.2msec降到了18.2msec。仍然要(比Set)慢大概150倍。

~$  python -m timeit -n 1000 "range1500=range(500, 1500);[x for x in range(1000) if x in range1500]"

set转成list方法如下:

s = set('12342212')                                                      
print s    # set(['1', '3', '2', '4'])                                       
l = list(s)                                                                        
l.sort()    # 排序                                                             
print l    # ['1', '2', '3', '4']   

list转成set方法如下:

l = ['12342212']
 s = set(l[0])
 print s    # set(['1', '3', '2', '4'])
 m = ['11','22','33','44','11','22']
  print set(m)    # set(['11', '33', '44', '22'])

可见set和lsit可以自由转换,在删除list中多个/海量重复元素时,可以先转换成set,然后再转回list并排序(set没有排序)。此种方法不仅方便且效率较高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值