Как найти повторяющиеся элементы в массиве, используя для цикла в Python? - PullRequest
22 голосов
/ 17 декабря 2009

У меня есть список с повторяющимися элементами:

 list_a=[1,2,3,5,6,7,5,2]

 tmp=[]

 for i in list_a:
     if tmp.__contains__(i):
         print i
     else:
         tmp.append(i)

Я использовал приведенный выше код для поиска дублирующихся элементов в list_a. Я не хочу удалять элементы из списка.

Но я хочу использовать здесь цикл. Обычно C / C ++ мы используем следующим образом:

 for (int i=0;i<=list_a.length;i++)
     for (int j=i+1;j<=list_a.length;j++)
         if (list_a[i]==list_a[j])
             print list_a[i]

как мы используем это в Python?

for i in list_a:
    for j in list_a[1:]:
    ....

Я попробовал вышеуказанный код. Но это неверное решение. Я не знаю, как увеличить значение для j.

Ответы [ 16 ]

0 голосов
/ 10 июля 2017

Конечно, я не проводил тесты, но думаю, что будет сложно победить панд по скорости:

 pd.DataFrame(list_a, columns=["x"]).groupby('x').size().to_dict()
0 голосов
/ 26 января 2017

В случае Python3 и двух списков

def removedup(List1,List2):
    List1_copy = List1[:]
        for i in List1_copy:
            if i in List2:
                List1.remove(i)

List1 = [4,5,6,7]
List2 = [6,7,8,9]
removedup(List1,List2)
print (List1)
0 голосов
/ 26 сентября 2013

Просто быстро и грязно,

list_a=[1,2,3,5,6,7,5,2] 
holding_list=[]

for x in list_a:
    if x in holding_list:
        pass
    else:
        holding_list.append(x)

print holding_list

Выход [1, 2, 3, 5, 6, 7]

0 голосов
/ 04 апреля 2012

Используя numpy:

import numpy as np
count,value = np.histogram(list_a,bins=np.hstack((np.unique(list_a),np.inf)))
print 'duplicate value(s) in list_a: ' + ', '.join([str(v) for v in value[count>1]])
0 голосов
/ 17 декабря 2009

Немного больше Pythonic-реализации (не самой, конечно), но в духе вашего C-кода может быть:

for i, elem in enumerate(seq):
    if elem in seq[i+1:]:
        print elem

Редактировать: Да, он печатает элементы более одного раза, если их более 2-х повторений, но это то же самое, что и псевдокод С для операции.

0 голосов
/ 17 декабря 2009

Вы можете просто «перевести» это строка за строкой.

с ++

for (int i=0;i<=list_a.length;i++)
    for (int j=i+1;j<=list_a.length;j++)
        if (list_a[i]==list_a[j])
            print list_a[i]

Python

for i in range(0, len(list_a)):
    for j in range(i + 1, len(list_a))
        if list_a[i] == list_a[j]:
            print list_a[i]

c ++ для цикла:

for(int x = start; x < end; ++x)

Python эквивалент:

for x in range(start, end):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...