Die entsprechende LC würde
[entry for tag in tags for entry in entries if tag in entry]
Die Reihenfolge der Schleifen in der LC sein zu den in verschachtelten Schleifen ähnlich ist, gehen die if-Anweisungen bis zum Ende und die bedingten Ausdrücke gehen am Anfang, etwas wie
[a if a else b for a in sequence]
Siehe Demo -
>>> tags = [u'man', u'you', u'are', u'awesome']
>>> entries = [[u'man', u'thats'],[ u'right',u'awesome']]
>>> [entry for tag in tags for entry in entries if tag in entry]
[[u'man', u'thats'], [u'right', u'awesome']]
>>> result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.append(entry)
>>> result
[[u'man', u'thats'], [u'right', u'awesome']]
BEARBEITEN - Da das Ergebnis geglättet werden muss, können Sie ein ähnliches Listenverständnis verwenden und dann die Ergebnisse reduzieren.
>>> result = [entry for tag in tags for entry in entries if tag in entry]
>>> from itertools import chain
>>> list(chain.from_iterable(result))
[u'man', u'thats', u'right', u'awesome']
diese zusammen Hinzufügen, könnten Sie einfach tun
>>> list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
[u'man', u'thats', u'right', u'awesome']
Sie verwenden einen Generator Ausdruck hier statt einer Liste Verständnis. (Passend zu den 79 Zeichen begrenzt zu (ohne list
Aufruf))
Verwenden 'itertools.chain', wenn Sie eine abgeflachte Liste wollen:' Liste (Ketten .from_iterable (Eintrag für Tag in Tags für Eintrag in Einträgen, wenn Tag im Eintrag)) ' –