Zählen in Liste

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

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?
Zuletzt geändert von Anonymous am Dienstag 21. Februar 2017, 16:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

@noisefloor: Das sieht doch gut aus mit dem Set Comprehension. Die Comprehension list war mir zwar bekannt, aber als Set Comprehension nicht. Danke dir.
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

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
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

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())
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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').
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

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...
Antworten