Учитывая два списка:
chars = ['ab', 'bc', 'ca']
words = ['abc', 'bca', 'dac', 'dbc', 'cba']
как можно использовать понимания списка для генерации фильтрованного списка words
следующим условием: учитывая, что каждое слово имеет длину n
и chars
имеет длину n
также, фильтрованный список должен включать только слова что каждый i
- символ th находится в i
- th представляют в виде строки в words
.
В этом случае мы должны добраться ['abc', 'bca']
в результате.
(Если это выглядит знакомым кому-либо, это было одним из вопросов в предыдущем заторе кода Google),
[w for w in words if all([w[i] in chars[i] for i in range(len(w))])]
>>> [word for word in words if all(l in chars[i] for i, l in enumerate(word))]
['abc', 'bca']
Используя zip:
[w for w in words if all([a in c for a, c in zip(w, chars)])]
или используя enumerate:
[w for w in words if not [w for i, c in enumerate(chars) if w[i] not in c]]