Odpowiedni LC byłoby
[entry for tag in tags for entry in entries if tag in entry]
Kolejność pętli w LC jest podobna do tych w zagnieżdżonych pętli if oświadczenia przejść do końca i wyrażenia warunkowe przejść na początku, coś jak
[a if a else b for a in sequence]
Zobacz 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']]
EDIT - Ponieważ wynik jest spłaszczony, można użyć podobnego spisu, a następnie spłaszczyć wyniki.
>>> 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']
Dodawanie tym razem, może po prostu zrobić
>>> 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']
użyć wyrażenia generatora tutaj zamiast listy zrozumieniem. (Idealnie pasuje limit 79 znaków zbyt (bez wezwania list
))
użyć 'itertools.chain' Jeśli chcesz spłaszczoną listę:' List (łańcuch .from_iterable (wpis dla tagu w tagach do wprowadzania w pozycjach, jeśli tag w wpisie)) ' –