У меня есть два списка, как показано ниже
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
Я хочу извлечь записи, entries
когда они находятся в tags
:
result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.extend(entry)
Как я могу написать два цикла как понимание списка одной строки?
python
list
for-loop
list-comprehension
Шива Кришна Бавандла
источник
источник
itertools.chain
если хотите сплющенный список:list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
Ответы:
Это должно сделать это:
источник
Лучший способ запомнить это - то, что порядок цикла for внутри понимания списка основан на порядке, в котором они появляются в традиционном подходе цикла. Сначала идет самый внешний цикл, а затем внутренний цикл.
Итак, эквивалентное понимание списка будет:
Как правило,
if-else
оператор ставится перед первым циклом for, и если у вас есть толькоif
оператор, он будет в конце. Например, если вы хотите добавить пустой список, еслиtag
его нет в записи, вы должны сделать это следующим образом:источник
Соответствующий аккредитив будет
Порядок циклов в LC аналогичен порядку циклов во вложенных циклах, операторы if идут в конец, а условные выражения идут в начало, что-то вроде
См. Демонстрацию -
РЕДАКТИРОВАТЬ. Поскольку вам нужно, чтобы результат был сглаженным, вы можете использовать аналогичное понимание списка, а затем сгладить результаты.
Сложив это вместе, вы могли бы просто сделать
Здесь вы используете выражение генератора вместо понимания списка. (Также идеально соответствует ограничению в 79 символов (без
list
вызова))источник
Вывод:
источник
источник
В понимании, итерация вложенных списков должна следовать в том же порядке, что и эквивалентные циклы for.
Чтобы понять это, мы возьмем простой пример из НЛП. Вы хотите создать список всех слов из списка предложений, где каждое предложение представляет собой список слов.
Чтобы удалить повторяющиеся слова, вы можете использовать набор {} вместо списка []
или применить
list(set(all_words))
источник