免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7395 | 回复: 16

列表过滤重复值怎么过滤 [复制链接]

论坛徽章:
0
发表于 2010-02-22 14:15 |显示全部楼层
aaaa=[]
这个是叫列表吧,囧???


其中有很多重复的的,我想过滤重复的怎么过滤?

比如,列表中有
a,b,c,d,a,b,c
过滤后成
a,b,c,d

论坛徽章:
0
发表于 2010-02-22 15:48 |显示全部楼层
数据量不大的话,比较笨的方法是:

循环一遍,用dict来保持key

论坛徽章:
0
发表于 2010-02-22 15:51 |显示全部楼层
>>> l=['a','b','c','d','a','b','c']
>>> ll = [ e for i,e in enumerate(l) if i == l.index(e) ]
>>> l
['a', 'b', 'c', 'd', 'a', 'b', 'c']
>>> ll
['a', 'b', 'c', 'd']
>>>

不过这样太慢了,还是自己写个循环来弄吧,虽然难看了点
>>> t={}      
>>> for i in l:
...   t[i]=0
...
>>> ll=t.keys()
>>> ll
['a', 'c', 'b', 'd']


不知道有没有现成的函数用,有的话效率顶多和写循环弄的一样吧

论坛徽章:
0
发表于 2010-02-22 17:31 |显示全部楼层
  1. >>> l=['a','b','c','d','a','b','c']
  2. >>> set(l)
  3. set(['a', 'c', 'b', 'd'])
复制代码

论坛徽章:
0
发表于 2010-02-22 18:51 |显示全部楼层
>>> 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]

论坛徽章:
0
发表于 2010-02-22 22:13 |显示全部楼层
set

论坛徽章:
0
发表于 2010-02-23 17:26 |显示全部楼层
我到网上看过一个方法,如下:
li = [1,1,2,2,3]
print  {}.fromkeys(li).keys()

论坛徽章:
0
发表于 2010-02-24 10:15 |显示全部楼层
我到网上看过一个方法,如下:
li = [1,1,2,2,3]
print  {}.fromkeys(li).keys()
marryton007 发表于 2010-02-23 17:26


这个用法还挺新奇,不过也是把数据转成dist,然后取key。还是set来的好。再多的数据也很迅速

论坛徽章:
0
发表于 2010-02-24 14:12 |显示全部楼层
http://www.peterbe.com/plog/uniqifiers-benchmark

参考一下这个网页。我跟这上面学的。

论坛徽章:
0
发表于 2010-02-24 15:00 |显示全部楼层
参考一下这个网页。我跟这上面学的。
marryton007 发表于 2010-02-24 14:12
貌似用dict方式比set还快?
这个只是少量数据测试,不知道大容量会怎么样
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP