В Python есть два мощных инструмента для быстрого и удобного создания списков: генераторы и списковые включения. Оба они позволяют создавать списки на лету, применяя определенные операции к каждому элементу исходного списка или другого итерируемого объекта.
Например, предположим, что есть список чисел, и необходимо умножить каждое число на 2. Это можно сделать так:
numbers = [1, 2, 3, 4, 5] doubled_numbers = [number * 2 for number in numbers] print(doubled_numbers) # Вывод: [2, 4, 6, 8, 10]
Здесь использовано списковое включение. Но то же самое можно сделать и с помощью генератора:
numbers = [1, 2, 3, 4, 5] doubled_numbers = (number * 2 for number in numbers) print(list(doubled_numbers)) # Вывод: [2, 4, 6, 8, 10]
На первый взгляд разница не очевидна, но она есть.
Списковые включения создают новый список и заполняют его результатами выполнения некоторого выражения. Это значит, что все результаты вычисляются сразу, и новый список занимает место в памяти.
Генераторы, с другой стороны, не создают список целиком. Вместо этого они создают объект-генератор, который «помнит» исходный список и выражение, которое нужно применить. Когда от генератора требуют следующий элемент, он вычисляет его на лету и возвращает. Это позволяет экономить память, особенно если исходный список большой.
Таким образом, если нужно создать новый список и работать с ним, удобно использовать списковые включения. А если нужно применить операцию к элементам списка, но сам список не нужен (например, просто нужно пройтись по его элементам и что-то с ними сделать), то лучше использовать генераторы.
Добавить комментарий