29 Stimmen

Wie doppelte Elemente in Array mit for-Schleife in Python zu finden?

Ich habe eine Liste mit doppelten Elementen:

 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)

Ich habe den obigen Code verwendet, um die doppelten Elemente in der list_a . Ich möchte die Elemente nicht aus der Liste entfernen.

Aber ich möchte hier eine for-Schleife verwenden. Normalerweise C/C++ wir verwenden wie diese ich denke:

 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]

wie kann man das in Python verwenden?

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

Ich habe den obigen Code ausprobiert. Aber er liefert die falsche Lösung. Ich weiß nicht, wie ich den Wert für j .

3voto

Alok Singhal Punkte 87419

Wenn Sie nach einer Eins-zu-Eins-Abbildung zwischen Ihren verschachtelten Schleifen und Python suchen, ist dies das Richtige für Sie:

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

Der obige Code ist nicht "Pythonisch". Ich würde es etwa so machen:

seen = set()
for i in list_a:
   if i in seen:
       print i
   else:
       seen.add(i)

Verwenden Sie außerdem nicht __contains__ verwenden Sie stattdessen in (wie oben).

2voto

Zoran Pavlovic Punkte 1097

Mit nur itertools, und funktioniert gut auf Python 2.5

from itertools import groupby
list_a = sorted([1, 2, 3, 5, 6, 7, 5, 2])
result = dict([(r, len(list(grp))) for r, grp in groupby(list_a)])

Ergebnis:

{1: 1, 2: 2, 3: 1, 5: 2, 6: 1, 7: 1}

2voto

LeMiz Punkte 5298

Das Folgende erfordert, dass die Elemente Ihrer Liste hashfähig sind (nicht nur die Implementierung __eq__ ). Ich finde es pythonischer, ein Standarddiktat zu verwenden (und Sie haben die Anzahl der Wiederholungen umsonst):

import collections
l = \[1, 2, 4, 1, 3, 3\]
d = collections.defaultdict(int)
for x in l:
   d\[x\] += 1
print \[k for k, v in d.iteritems() if v > 1\]
# prints \[1, 3\]

1voto

Ahmer Kureishi Punkte 21

Es sieht so aus, als hätten Sie eine Liste ( list_a ), die möglicherweise Duplikate enthalten, die Sie lieber unverändert lassen und eine Liste ohne Duplikate erstellen möchten tmp basierend auf Liste_a. In Python 2.7 können Sie dies mit einer Zeile erreichen:

tmp = list(set(list_a))

Der Vergleich der Längen von tmp y list_a zu diesem Zeitpunkt sollte geklärt werden, ob es tatsächlich doppelte Einträge in list_a . Dies kann zur Vereinfachung beitragen, wenn Sie in die Schleife für die weitere Verarbeitung gehen wollen.

0voto

Juh_ Punkte 13093

Numpy verwenden:

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]])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X