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:

Code: Alles auswählen

myList = [1,2,3,4,4,5,6,7,8]
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.

Code: Alles auswählen

myList = [1,2,3,4,9,5,4,7,8]
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.
:oops: Das hab ich wohl übersehen