Есть список, из которого мне нужно найти дубликаты - PullRequest
1 голос
/ 22 января 2020

Я написал код, который может это сделать. Тем не менее, я не могу найти точное значение. Код, который я написал, разделяет все значения со мной, а не только с 1 повторяющимся значением

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 голосов
/ 22 января 2020

Ваш код будет работать, если вы добавите еще одно условие в , если Заявление.

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']
0 голосов
/ 22 января 2020

вы можете использовать понимание списка с collections.Counter:

from collections import Counter

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

output:

['b', 'n']

другой подход будет сортировать ваш список :

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

print(elements)

выход:

{'b', 'n'}
0 голосов
/ 22 января 2020

Counter и defaultdict структуры данных из модуля collections идеально подходят для варианта использования, здесь представлен другой подход, использующий нормальную 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']
0 голосов
/ 22 января 2020

Мы можем использовать 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 модуле, пожалуйста, go через https://docs.python.org/2/library/collections.html#collections .Counter

0 голосов
/ 22 января 2020

Ваш код добавляет все дублирующиеся значения в новый список, т. Е. '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']
0 голосов
/ 22 января 2020
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)

out:

['b', 'n']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...