Seite 1 von 1

Zählen in Liste

Verfasst: Dienstag 21. Februar 2017, 15:25
von api
Hallo zusammen,

ich möchte gerne in einer 2-dimensionalen Liste, die Anzahl der Texte im Feld 0 zählen. Dazu hätte ich folgenden Code:

Code: Alles auswählen

a = [['text1', 2, 3], ['text1', 2, 3], ['text4', 2, 4]. ['text5', 2, 5]]
target = []
for item in a:
  target.append(item[0])
  
print len(set(target))
Ausgabe:
Das funktioniert auch. Ich wollte nur mal fragen, ob das so ok ist oder man dann das auch geschickter machen kann?

Re: Zählen in Liste

Verfasst: Dienstag 21. Februar 2017, 16:00
von noisefloor
Hallo,

das kannst aus `target` direkt ein `set` machen und beim Iterieren per `.add()` Elemente hinzufügen. Dann sparst du dir die Umwandlung Liste -> Set am Ende.

Oder du nutzt direkt ein Set Comprehension:

Code: Alles auswählen

target = {x[0] for x in a}
Gruß, noisefloor

Re: Zählen in Liste

Verfasst: Dienstag 21. Februar 2017, 16:13
von api
@noisefloor: Das sieht doch gut aus mit dem Set Comprehension. Die Comprehension list war mir zwar bekannt, aber als Set Comprehension nicht. Danke dir.

Re: Zählen in Liste

Verfasst: Mittwoch 22. Februar 2017, 09:03
von Zizibee
Auch wenn meine Frage jetzt wahrscheinlich zeigt, dass ich bei Python erst an der Oberfläche kratze oder die Frage nicht ganz verstanden habe, aber warum macht man das nicht einfach so:

Code: Alles auswählen

>>> a = [['text1', 2, 3], ['text1', 2, 3], ['text4', 2, 4], ['text5', 2, 5]]
>>> len(a[0])
3

Re: Zählen in Liste

Verfasst: Mittwoch 22. Februar 2017, 09:29
von sebastian0202
Wenn du jetzt von deiner Liste 'a' dir die Länge des ersten Elementes anzeigen lässt,
handelt es sich auch wirklich nur um die Länge des ersten Elementes.

Das erste Element von 'a[0]' ist => ['text1', 2, 3]. Die Länge dieser Liste beträgt 3 Elemente.

Du möchtest ja aber eigentlich alle unterschiedlichen Texte selektieren.
Da ist die Set-Comprehension echt ne gute Wahl.
Deine Lösung mit len(a[0]) stellt für dein Problem gar keine Lösung dar.

Du könntest es auch ausformulieren:

Code: Alles auswählen

a = [['text1', 2, 3], ['text1', 2, 3], ['text4', 2, 4], ['text5', 2, 5]]
buch = {}
for weitere_liste in a:
    buch[weitere_liste[0]] = 1
unterschiedliche_texte = len(buch.keys())

Re: Zählen in Liste

Verfasst: Mittwoch 22. Februar 2017, 09:37
von /me
Zizibee hat geschrieben:[...] warum macht man das nicht einfach so:

Code: Alles auswählen

>>> a = [['text1', 2, 3], ['text1', 2, 3], ['text4', 2, 4], ['text5', 2, 5]]
>>> len(a[0])
3
Weil das etwas völlig anderes ist. Du greifst dir mit a[0] das erste Element aus der Liste, also ['text1', 2, 3]. Darauf wendest du jetzt len an.

Gesucht ist aber die Anzahl unterschiedlichen Texte in jedem Element der Liste ('text1', 'text4', 'text5').

Re: Zählen in Liste

Verfasst: Mittwoch 22. Februar 2017, 09:47
von Zizibee
Okay, danke für die Antworten! Ich hätte mir die Frage wohl etwas genauer durchlesen sollen.
Bei mir ist nur "die Anzahl [...] im Feld 0 zählen" hängen geblieben...