1

我试图找出所有重复项目的列表list

我的代码:

list=['see','eat','feel','see','eat']
i=0
j=0
l=[]

for i in range(len(list)-1):
    j=i+1
    for j in range(len(list)):
        if (list[i]==list[j]):
            l.append(list[i])

print(l)

预期输出:

['see', 'eat']

实际输出:

['see', 'see', 'eat', 'eat', 'feel', 'see', 'see']

重复项应该只存在于list. 我哪里错了??

4

5 回答 5

3

您可以使用collections.Counter()标准库类来获得更有效的方法。

import collections

lst = ['see','eat','feel','see','eat']
lst_counts = collections.Counter(lst)
duplicates = [value for (value, count) in lst_counts.items() if count > 1]

print(duplicates)

输出

['see', 'eat']

于 2019-10-06T12:55:16.713 回答
2

这两行:

j=i+1
for j in range(len(list)):

首先你给 一些值j,然后在 for 循环中你让它循环 0 到 len(list) 并且值被遗忘。那不是你的意思。

反而

for j in range(i+1, len(list)):

我想会按照你的意愿去做。

但是,如果某些值出现,例如三次,那仍然会给您带来问题。

于 2019-10-06T12:56:30.043 回答
0

你可以使用下面的列表理解来做到这一点

ls=['see','eat','feel','see','eat']

[ls[i] for i in range(len(ls)) for j in range(len(ls)) if (j>i and ls[i]==ls[j])]
于 2019-10-06T13:03:08.187 回答
0

你必须循环,所以你得到两个单词对的所有组合。

最好,只使用一个循环,并跟踪重复的元素:

seen = set()
duplicates = set()
for item in list:
    if item in seen:
        duplicates.add(item)
    else:
        seen.add(item)
于 2019-10-06T13:07:33.490 回答
0

尝试这个:

l=[]

for i in list:
    c=0
    for j in list:
        if i==j :
            c+=1
    if c!=1:
        flag=0
        for k in l:
            if k==i:
                flag=1
        if flag==0:
            l.append(i)
print(l) 

在这段代码中,我使用了三个循环 1. 重复每个值以检查是否重复 2. 重复每个值并将它们进行比较。注意 repting 值将在 c 中的值是 2 或更多 3. 检查天气存储在 l 中的值不重复

于 2019-10-06T13:10:57.347 回答