(gelöst)Wie kann man Dopplungen in einer Liste überprüfen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

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
Zuletzt geändert von Schaf220 am Samstag 30. Januar 2010, 16:35, insgesamt 2-mal geändert.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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ß
Grüßle.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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]?
Das Leben ist wie ein Tennisball.
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

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
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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)
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Hey vielen Dank an alle, das hat mir sher geholfen =)

MfG Schaf220
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

groupby kann man schon verwenden man muss vorher nur die Liste sortieren
the more they change the more they stay the same
BlackJack

@Dav1d: Das wird aber mehr als umständlich. Es waren als Ergebnis die Idizes der Dopplungen gefragt.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
the more they change the more they stay the same
Antworten