Ich habe zwei Listen wie unten
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
Ich möchte Einträge extrahieren, aus entries
denen sie stammen tags
:
result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.extend(entry)
Wie kann ich die beiden Schleifen als einzeiliges Listenverständnis schreiben?
python
list
for-loop
list-comprehension
Shiva Krishna Bavandla
quelle
quelle
itertools.chain
Sie, wenn Sie eine abgeflachte Liste wünschen:list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
Antworten:
Dies sollte es tun:
quelle
Der beste Weg, sich daran zu erinnern, ist, dass die Reihenfolge der for-Schleife innerhalb des Listenverständnisses auf der Reihenfolge basiert, in der sie im traditionellen Schleifenansatz erscheinen. Die äußerste Schleife kommt zuerst und dann die innere Schleife anschließend.
Das äquivalente Listenverständnis wäre also:
Im Allgemeinen steht die
if-else
Anweisung vor der ersten for-Schleife, und wenn Sie nur eineif
Anweisung haben, wird sie am Ende stehen. Wenn Sie beispielsweise eine leere Liste hinzufügen möchten, wenn diesetag
nicht im Eintrag enthalten ist, gehen Sie folgendermaßen vor:quelle
Der passende LC wäre
Die Reihenfolge der Schleifen in der LC ist ähnlich wie in verschachtelten Schleifen, die if-Anweisungen gehen zum Ende und die bedingten Ausdrücke gehen zum Anfang, so etwas wie
Siehe die Demo -
BEARBEITEN - Da das Ergebnis reduziert werden muss, können Sie ein ähnliches Listenverständnis verwenden und dann die Ergebnisse reduzieren.
Wenn Sie dies zusammenzählen, können Sie es einfach tun
Sie verwenden hier einen Generatorausdruck anstelle eines Listenverständnisses. (Passt auch perfekt zum Limit von 79 Zeichen (ohne
list
Anruf))quelle
Ausgabe:
quelle
Zum Verständnis sollte die Iteration verschachtelter Listen in derselben Reihenfolge erfolgen wie das für Schleifen imäplierte Äquivalent.
Zum Verständnis nehmen wir ein einfaches Beispiel aus NLP. Sie möchten eine Liste aller Wörter aus einer Liste von Sätzen erstellen, wobei jeder Satz eine Liste von Wörtern ist.
Um die wiederholten Wörter zu entfernen, können Sie eine Menge {} anstelle einer Liste [] verwenden.
oder bewerben
list(set(all_words))
quelle
quelle