Независимые итераторы в генераторе списков
В Python генераторы списков допускают несколько циклов итерации. Рассмотрим следующий пример:
[(x, y) for x in a for y in b]
где a и b — последовательности. Это понимание создает пары элементов из декартова произведения a и b.
Могут ли итераторы быть зависимыми?
Может ли один итератор в понимании списка ссылаться на другой? Ответ — да, и следующий код демонстрирует это:
[x for x in a for a in b]
В этом понимании итератор внешнего цикла a становится итератором для внутреннего цикла. Это эффективно выравнивает вложенный список.
Пример
Если у нас есть вложенный список a:
a = [[1, 2], [3, 4]]
Следующее понимание списка сведет его в один список:
[x for x in a for a in b]
Результат:
[1, 2, 3, 4]
Альтернативное решение с использованием генераторов
В предоставленном коде Python текст хранится в виде предложений, и задача для извлечения одного списка слов. Вот как этого можно добиться с помощью генератора:
text = (("Hi", "Steve!"), ("What's", "up?"))
gen = (word for sentence in text for word in sentence)
Переменная gen теперь возвращает плоский список слов:
for word in gen:
print(word)
Вывод:
Hi Steve! What's up?
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3