MyTetra Share
Делитесь знаниями!
Что означает запись [a for a in anyList ... ] в python? Синтаксис генераторов, фильтрация списков
Время создания: 06.12.2024 11:49
Текстовые метки: python, генератор, for, in, список, синтаксис, фильтрация, преобразование, условие
Раздел: Компьютер - Программирование - Язык Python
Запись: xintrea/mytetra_syncro/master/base/1733474970qxkhtodhka/text.html на raw.github.com

В Python часто используются генераторы, которые записываются с использованием следующего синтаксиса:



[<добавляемое значение> for <переменная> in <объект итерирования>]



Генератор в данном случае - это такая конструкция, которая создает список. Именно поэтому вся конструкция заключается в квадратные скобки [ ].


Генерирование значений происходит следующим образом. Конструкцией for ... in ... перебираются элементы из объекта итерирования. То есть, на каждой итерации в переменную укладывается очередной элемент из объекта итерирования. И дополнительно, на каждой итерации, вычисляется выражение, обозначенное как добавляемое значение. Именно одно и добавляется в создаваемый генератором список.


Вот пример, который генерирует список квадратов из начального списка чисел:



anyList = [1, 2, 3, 4, 5]


newList = [a**2 for a in anyList]

print(newList)


Результат:


[1, 4, 9, 16, 25]



Однако часто перебор значений из объекта итерирования может дополняться условиями. Тогда в результирующий список будут попадать только те значения, исходные элементы которых удовлетворяют условию.


Вот пример генерации списка файлов из произвольной директории. В список попадают только *.txt-файлы и только настоящие файлы (не директории):



directory = "/path/to/directory"


files = [f for f in os.listdir(directory) if f.endswith(".txt")

and os.path.isfile(os.path.join(directory, f))]



Здесь запись [f for f ... означает что итоговое имя файла попадает в итоговый список без изменений. То есть, добавляемое значение равно перебираемому значению.



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования