2 Stimmen

Listenverständnis in verschachtelten Listen

Ich habe eine Liste wie [["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]

und ich möchte es aufteilen, so dass ich eine Zählung der Gesamtzahl der As, Bs, etc. erhalten kann, aber ich bin neu in Python und mit ein bisschen Zeit von ihm.

Ich benutze [lx for lx in [li[1] for li in fieldlist if li[1]]] um zu versuchen, eine Liste mit allen Elementen in den Unter-Unterlisten zu erhalten, aber das ergibt eine Liste mit den ersten Unterlisten ( [["a", "b", "c"], ["a", "b", "f"]] anstelle einer Liste mit dem Inhalt dieser Teillisten. Ich bin mir ziemlich sicher, dass ich einfach nur falsch darüber denke, da ich neu in List Comprehensions und Python bin.

Hat jemand eine gute Methode, dies zu tun? (und ja, ich weiß, dass die von mir gewählten Namen (lx, li) schrecklich sind)

Gracias.

5voto

sepp2k Punkte 352762

So erhalten Sie die gewünschte Liste:

[lx for li in fieldlist for lx in li[1] if li[1]]

0voto

John Machin Punkte 78125

Verständnis der Liste:

>>> s = [["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]
>>> [x for y, z in s for x in z]
['a', 'b', 'c', 'a', 'b', 'f']
>>>

Was ist der Zweck Ihrer if li[1] ? Wenn li[1] eine leere Liste oder ein anderer Container ist, ist der Test überflüssig. Andernfalls sollten Sie Ihre Frage bearbeiten und erklären, was es sonst sein könnte.

0voto

Pi Delport Punkte 9941

Eine pythonische Lösung wäre etwa so:

>>> from collections import Counter
>>> Counter(v for (field, values) in fieldlist
...           for v in values)
Counter({'a': 2, 'b': 2, 'c': 1, 'f': 1})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X