Функция, которая считает дубликаты в списке и возвращает список с каждой парой - PullRequest
0 голосов
/ 28 апреля 2020

У меня вопрос по следующей проблеме. Я хочу получить функцию с именем duplicated_pairs(), которая помогает мне найти все пары дубликатов в списке чисел и возвращает список с парами.

Например, если введено:

list_1 = [0,0,1,1,1,2,4]

Мой ожидаемый результат будет

[[0,0],[1,1,1]]

Код, который я пробовал:

import collections 

def duplicated_pairs(x):
    temp = collections.Counter(x)
    res = [[i] * j for i, j in temp.items()] 
    print(str(res))

list_1 = [0,0,1,1,1,2,4]
duplicated_pairs(list_1)

Я думаю, это не работает. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вот простой алгоритм, который работает в O (nlog (n))

def duplicates(A):
  N=len(A)
  dup=False
  final_list=[]
  list_of_same_elements=[]
  for i in range(1,N):
    prev=A[i-1]
    cur=A[i]
    if(cur==prev):
      if(dup==False):
        list_of_same_elements=[prev,cur]
        dup=True
      else:
        list_of_same_elements.append(cur)
    else:
      if(dup==True):
        final_list.append(list_of_same_elements)
        list_of_same_elements=[]
        dup=False
  return final_list

A=[0,0,1,1,1,2,4]
A.sort()
print(duplicates(A))
0 голосов
/ 28 апреля 2020

Вы можете использовать defaultdict для перегруппировки значений, а затем просто отфильтровать списки значений, которые не были дублированы. Например:

import collections 

def duplicated_pairs(x):
    temp = collections.defaultdict(list)
    for value in x:
        temp[value].append(value)
    print([lst for lst in temp.values() if len(lst) > 1])

list_1 = [0,0,1,1,1,2,4]
duplicated_pairs(list_1)

Будет печатать:

[[0, 0], [1, 1, 1]]
...