listen prü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
Gast

Donnerstag 8. April 2004, 16:00

hallo zusammen!

ich möchte prüfen, ob einträge einer liste mehrfach vorkommen.
also z.b.

Code: Alles auswählen

l=['a','a','b','c']
a kommt zweimal vor.

wie geht ihr das an?

mfg

rolgal mit seinen spezialproblemen :D
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 8. April 2004, 16:47

Hi rolgal,

kommt darauf an, ob du auch wissen willst, wie oft jeder eintrag vorkommt, oder ob es reicht, zu wissen ob und welche einträge mehrfach vorkommen.

Erstmal der Test ob überhaupt doppelte vorkommen

Code: Alles auswählen

l=['a','b','c','a']
l.sort()
last = None
for x in l:
    if x == last:
        doppelte = True
        break
    else:
        last = x
else: #for !!!
    doppelte = False

print doppelte
Das erstellt eine Liste der Mehrfachvorkommenden

Code: Alles auswählen

l=['a','b','c','a']
l.sort()
result = []
last = None
for x in l:
    if x == last:
        result.append(x)
    else:
        last = x

print result
Und hier wird ein Dictionary erstellt in dem für jeden Eintrag die Häufigkeit des Vorkommens festgehalten wird.

Code: Alles auswählen

l=['a','b','c','a']
result = {}
for x in l:
    if x in result.keys():
        result[x] += 1
    else:
        result[x] = 1

print result

Gruß

Dookie
Gast

Freitag 9. April 2004, 04:38

hi dookie!

danke dir mal wieder!

werde das alles morgen mal ausprobieren!

mfg

rolgal
Gast

Freitag 9. April 2004, 11:39

hi dookie!

also mir ist da einiges nocht nicht klar. zum ziel. mit jedem listen eintrag soll was passieren, die doppelten einträge werden ignoriert.

nun zu dem was mir gar nicht klar ist.
warum machst du die zuweisung

Code: Alles auswählen

last=None
und in welchem fall ist

Code: Alles auswählen

 x==last

:?: :?:

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 9. April 2004, 12:07

Hi rolgal,

ich gehe mal davon aus, das die Liste keinen Eintrag mit dem Wert "None" hat.
"last" hätte ich besser "last_visited" nennen sollen. "x==last" wird immer dann wahr, wenn der letzte untersuchte Eintrag, also quasi der Vorgänger, "last" gleich dem aktuellen Eintrag "x" ist, darum wird die Liste auch vorher sortiert. Beim ersten Schleifendurchlauf wird last deshalb auf None gesetzt, weil ja noch kein Element untersucht wurde.

Für Deine Problemstellung gibts auch noch eine elegantere Lösung:

Code: Alles auswählen

from sets import Set

l=['a','b','c','a']
s = Set(l)
for x in s:
    print x #oder mach sonstwas damit
Gruß

Dookie
Gast

Freitag 9. April 2004, 12:29

hi dookie!

danke! das mit set ist genau das was ich brauche. zumindest haben das die ersten versuche gezeigt.

muss ich mal die doku dazu lesen. ist ja ein urgeiles modul, wie es scheint.

mfg

rolgal
Antworten