有一个列表,我需要从中查找重复项

时间:2020-01-22 06:46:26

标签: python list

我已经写了一个能够做到的代码。但是,我无法找到确切的值。我编写的代码将与我共享所有值,而不仅仅是一个重复的值

some_list=['a','b','c','b','d','m','n','n']
a=[]
for items in some_list:
  if some_list.count(items) > 1:
      a.append(items)
print (a)

6 个答案:

答案 0 :(得分:0)

some_list=['a','b','c','b','d','m','n','n']
a=[]
for items in some_list:
    if some_list.count(items) > 1:
        if items not in a:
            a.append(items)
print (a)

输出:

['b', 'n']

或:

some_list=['a','b','c','b','d','m','n','n']
a=[]
for items in some_list:
    if some_list.count(items) > 1:

        a.append(items)
a=set(a)
print (a)

退出:

['b', 'n']

答案 1 :(得分:0)

您的代码会将所有重复值附加到新列表(即“ a”)上。要仅保留1个重复值,您需要检查列表中是否已经存在相同的值。如果该位置不存在,则仅应将该值附加到列表中。我已经修改了您的代码,以适应这种需求。

enter code here
some_list=['a','b','c','b','d','m','n','n']
a=[]
for items in some_list:
  if some_list.count(items) > 1 and a.count(items) == 0:
      a.append(items)
print (a)

输出:

['b', 'n']

答案 2 :(得分:0)

我们可以利用Counter包中的Collections模块。

from collections import Counter
final_list = []
cntr = Counter(['a','b','c','b','d','m','n','n'])
for i in cntr.iteritems():
    if i[1] > 1:
        final_list.append(i[0])
print final_list

有关Counter模块的更多信息,请通过https://docs.python.org/2/library/collections.html#collections.Counter

答案 3 :(得分:0)

Counter模块中的

defaultdictcollections数据结构非常适合用例,这是另一种使用常规dict数据结构的方法,对于初学者而言可能更直观了解方法。

方法

第1步:构建一个以项为键,其出现为值的字典。

步骤2过滤出出现次数小于2的项目,换句话说,选择出现次数大于1的项目。

def get_duplicates(some_list): 
    frequency_counter = {}

    # Step-1
    for item in some_list:
        if item in frequency_counter:
            frequency_counter[item] += 1
        else:
            frequency_counter[item] = 1

    # Step-2
    return [item for item, count in frequency_counter.items() if count > 1]

In [2]: get_duplicates(['a','b','c','b','d','m','n','n'])                                                                                     
Out[2]: ['b', 'n']

答案 4 :(得分:0)

您可以将列表理解与collections.Counter一起使用:

from collections import Counter

[e for e, freq in Counter(some_list).items() if freq > 1]

输出:

['b', 'n']

另一种方法是对列表进行排序

previous = None
elemetns = set()
for i in sorted(some_list):
    if previous == i:
        elemetns.update(i)
    previous = i

print(elements)

输出:

{'b', 'n'}

答案 5 :(得分:0)

如果您在 if 语句中再添加一个条件,您的代码将起作用。

some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
a = []
for items in some_list:
    if some_list.count(items) > 1 and items not in a:
        a.append(items)
print (a)

输出:-

['b', 'n']