我有一份物品清单:
mylist = ['A','A','B','C','D','E','D']
我想返回一个只包含出现超过一次的项目的唯一列表,以便我的期望输出将是:
[A,D]
不确定如何开始,但我的思路是先追加每个项目的计数,然后删除任何等于1的内容。然后去重,但这似乎是一种非常迂回、低效的方式,因此我正在寻求建议。
我有一份物品清单:
mylist = ['A','A','B','C','D','E','D']
我想返回一个只包含出现超过一次的项目的唯一列表,以便我的期望输出将是:
[A,D]
不确定如何开始,但我的思路是先追加每个项目的计数,然后删除任何等于1的内容。然后去重,但这似乎是一种非常迂回、低效的方式,因此我正在寻求建议。
collections.Counter
来完成你所描述的操作。from collections import Counter
mylist = ['A','A','B','C','D','E','D']
cnt = Counter(mylist)
print([k for k, v in cnt.items() if v > 1])
# ['A', 'D']
items()
而不是 iteritems()
:https://dev59.com/q10a5IYBdhLWcg3wW3nN#30418498。 - Mark Cramerprint
参数周围加上括号。print([k for k, v in cnt.items() if v > 1])
将会起作用。 - muellermarkus>>> mylist = ['A','A','B','C','D','E','D']
>>> set([i for i in mylist if mylist.count(i)>1])
set(['A', 'D'])
import collections
cc = collections.Counter(mylist) # Counter({'A': 2, 'D': 2, 'C': 1, 'B': 1, 'E': 1})
cc.subtract(cc.keys()) # Counter({'A': 1, 'D': 1, 'C': 0, 'B': 0, 'E': 0})
cc += collections.Counter() # remove zeros (trick from the docs)
print cc.keys() # ['A', 'D']
试试这个:
a = ['A','A','B','C','D','E','D']
import collections
print [x for x, y in collections.Counter(a).items() if y > 1]
['A', 'D']
参考:如何使用for循环在Python中查找数组中的重复元素?
或者
def list_has_duplicate_items( mylist ):
return len(mylist) > len(set(mylist))
def get_duplicate_items( mylist ):
return [item for item in set(mylist) if mylist.count(item) > 1]
mylist = [ 'oranges' , 'apples' , 'oranges' , 'grapes' ]
print 'List: ' , mylist
print 'Does list have duplicate item(s)? ' , list_has_duplicate_items( mylist )
print 'Redundant item(s) in list: ' , get_duplicate_items( mylist )
参考 https://www.daniweb.com/software-development/python/threads/286996/get-redundant-items-in-list
这篇文章提供了获取列表中冗余项的Python代码示例。使用与其他人类似的方法,这是我尝试:
from collections import Counter
def return_more_then_one(myList):
counts = Counter(my_list)
out_list = [i for i in counts if counts[i]>1]
return out_list
It can be as simple as ...
print(list(set([i for i in mylist if mylist.count(i) > 1])))
set命令示例:
X = ['A','A','B','C','D','E','D']
Y = set(X)
Z = []
for val in Y :
occurrences = X.count(val)
if(occurrences > 1) :
#print(val,'occurs',occurrences,'times')
Z.append(val)
print(Z)
列表 Z 将保存出现多次的列表项。而我给出注释(#)的部分将显示每个出现多次的列表项的出现次数。
另一种解决方案是所写的:
def delete_rep(list_):
new_list = []
for i in list_:
if i not in list_[i:]:
new_list.append(i)
return new_list
这是我不使用包的方法
result = []
for e in listy:
if listy.count(e) > 1:
result.append(e)
else:
pass
print(list(set(result)))
可能不如内部实现快,但是它以(几乎)线性时间执行(因为set
查找是对数级别的)
mylist = ['A','A','B','C','D','E','D']
myset = set()
dups = set()
for x in mylist:
if x in myset:
dups.add(x)
else:
myset.add(x)
dups = list(dups)
print dups