Seite 1 von 1
(gelöst)Wie kann man Dopplungen in einer Liste überprüfen?
Verfasst: Sonntag 20. Dezember 2009, 15:23
von Schaf220
Hallo liebe Communtity,
ich habe leider dieses Problem und weiß grad nicht weiter, ich möchte gucken ob in eienr Liste zum Beispiel eine Zahl mehrmals vorkommt.
Zum Beispiel:
Jetzt möchte ich jetzt gerne den Index der Dopplung wissen.
Kennt jemand dafür eine Methode?
MfG Schaf220
Verfasst: Sonntag 20. Dezember 2009, 15:34
von theliquidwave
Vermutlich geht's viel einfacher und schöner, aber es geht
Code: Alles auswählen
>>> myList = [1,2,3,4,4,5,6,7,8]
>>> dblList = []
>>> for i, x in enumerate(myList):
if myList.count(x) > 1:
dblList.append((x, i))
>>> dblList
[(4, 3), (4, 4)]
Edit: Als Listcomprehension:
Code: Alles auswählen
>>> myList = [1,2,3,4,4,5,6,7,8]
>>> dblList = [(x, i) for i, x in enumerate(myList) if myList.count(x) > 1]
>>> dblList
[(4, 3), (4, 4)]
Gruß
Verfasst: Sonntag 20. Dezember 2009, 15:40
von EyDu
Für einfache Dopplungen:
Code: Alles auswählen
[i for i, (x, y) in enumerate(zip(myList, myList[1:])) if x==y]
Edit: interessant könnte für dich auch ein Blick auf
groupby sein.
Edit 2: Weil beide Lösungen nicht alles abdecken: was bedeutet mehrmals? Eine einfache Dopplung, beliebig oft hintereinander oder die 4 im folgenden Beispiel: [1, 2, 4, 5, 6, 4]?
Verfasst: Sonntag 20. Dezember 2009, 15:53
von Schaf220
Du hast Recht EyDu leider kann es auch vorkommen, das die Zahlen nicht immer genau hintereinander sind.
mfg Schaf220
Verfasst: Sonntag 20. Dezember 2009, 15:54
von jbs
Code: Alles auswählen
from collections import defaultdict
d = defaultdict(list)
for i, e in enumerate([1,2,3,4,4,5,6,7,4]):
d[e].append(i)
print [(e, d[e]) for e in d if len(d[e]) >1]
Mal mit defaultdict.
Verfasst: Sonntag 20. Dezember 2009, 17:19
von snafu
Code: Alles auswählen
In [29]: class MyList(list):
....: def indices(self, value):
....: return tuple(i for i,v in enumerate(self) if v == value)
....:
....:
In [30]: l = MyList([1, 2, 3, 4, 9, 5, 4, 7, 8])
In [31]: l.indices(4)
Out[31]: (3, 6)
Verfasst: Sonntag 20. Dezember 2009, 19:42
von Schaf220
Hey vielen Dank an alle, das hat mir sher geholfen =)
MfG Schaf220
Verfasst: Montag 21. Dezember 2009, 14:23
von Dav1d
groupby kann man schon verwenden man muss vorher nur die Liste sortieren
Verfasst: Montag 21. Dezember 2009, 17:03
von BlackJack
@Dav1d: Das wird aber mehr als umständlich. Es waren als Ergebnis die Idizes der Dopplungen gefragt.
Verfasst: Montag 21. Dezember 2009, 18:13
von Dav1d
BlackJack hat geschrieben:@Dav1d: Das wird aber mehr als umständlich. Es waren als Ergebnis die Idizes der Dopplungen gefragt.

Das hab ich wohl übersehen