Chinaunix

标题: 如何找出 python list 中有重复的项 [打印本页]

作者: iamkey9    时间: 2010-03-22 14:36
标题: 如何找出 python list 中有重复的项
本帖最后由 iamkey9 于 2010-03-22 14:47 编辑

如题,
我找到了去除的方法,但是没找到列出的方法
list(set(LIST))

我想知道 (多个)重复项 在某个位置, 一共出现了多少次

有没有知道的朋友,给点提示,谢谢
作者: luffy.deng    时间: 2010-03-22 14:53
遍历一次吧
作者: iamkey9    时间: 2010-03-22 15:00
遍历一次吧
luffy.deng 发表于 2010-03-22 14:53


我就是不想用遍历呢,我一直在想用set 和 list 能不能做减法,求得差,应该就是有重复的项了......
作者: smallfish_xy    时间: 2010-03-22 15:48
>>> s=[11,22,11,44,22]
>>> [(s[i],i) for i in range(len(s)) if s.count(s[i])>1]
[(11, 0), (22, 1), (11, 2), (22, 4)]

是否想这个样子的。。。
作者: iamkey9    时间: 2010-03-22 17:17
>>> s=[11,22,11,44,22]
>>> [(s,i) for i in range(len(s)) if s.count(s)>1]
[(11, 0), (22, 1), (11,  ...
smallfish_xy 发表于 2010-03-22 15:48



谢谢,这个很有用:-)

我更想要的是类似这样的结果

如果list有一个,
s=[11,22,11,44,22,33]
输出
[
[11,(0,3)]
[22,(1,5)]
]
代表了11有重复,重复位置是(0,3)

如果是两个,就
s1=[11,22,11,44,22,33]
s2=[11,44]
输出
[
[11,(1.0,1.3,2.1)]
[22,(1.1,1.5)]
[44,(1.3,2.1)]
]
作者: nameliba    时间: 2010-03-24 10:22
(多个)重复项 在某个位置, 一共出现了多少次
s=[11,22,11,44,22]
s.count(22)
结果:2
作者: luffy.deng    时间: 2010-03-26 15:24
本帖最后由 luffy.deng 于 2010-03-26 15:34 编辑

回复 5# iamkey9

这个可以用defaultdict解决,而且很有趣。
  1. from collections import defaultdict
  2. s=[11,22,11,44,22,33]
  3. d = defaultdict(list)
  4. for k,va in [(v,i) for i,v in enumerate(s)]:
  5.     d[k].append(va)
  6. print  d.items()
复制代码
输出: [(33, [5]), (11, [0, 2]), (44, [3]), (22, [1, 4])]
作者: wqjwftcaqr    时间: 2010-11-12 13:34
回复  iamkey9

这个可以用defaultdict解决,而且很有趣。输出: [(33, [5]), (11, [0, 2]), (44, [3]), ...
luffy.deng 发表于 2010-03-26 15:24



    d = defaultdict(list) ,这句话,好有趣哦,交互式再给点简单的例子,这个例子有点看不懂,学习学习
作者: jruv    时间: 2010-11-18 00:08
  1. >>> from collections import Counter
  2. >>> Counter([11,22,11,44,22,33])
  3. Counter({11: 2, 22: 2, 33: 1, 44: 1})
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2