JavaRush /Курсы /Модуль 1: Python Core /Генерация списков

Генерация списков

Модуль 1: Python Core
5 уровень , 6 лекция
Открыта

7.1 Умножение

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

Генерация строк

Его можно применять к строкам:


print("Мама" * 5)  # выведет МамаМамаМамаМамаМама
        

Или можно, например, быстро вывести строку-разделитель:


print("-" * 40)  # выведет ----------------------------------------
        

Генерация списков

Также можно умножать количество элементов в списке:


print(["apple"] * 5)  # выведет ['apple', 'apple', 'apple', 'apple', 'apple']
        

Этот оператор имеет и более практическое применение. Например, вы хотите создать список из 10 элементов, заполненный нулями:


alist = [0] * 10
print(alist)  # выведет [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
        

Можно даже сделать двумерный массив. Например, вы хотите создать массив 20x10, заполненный нулями. Это также просто:


alist = [[0] * 10] * 20 
print(alist)  # выведет [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]
        

Очень удобно, не правда ли?

7.2 List Comprehension

В Python есть такой полезный инструмент, как «List Comprehension» (списковое включение) — это удобный и компактный способ создавать списки. Этот синтаксический инструмент позволяет генерировать новые списки, применяя выражение к каждому элементу итерируемого объекта в одной короткой строке кода.

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


[выражение for переменная in последовательность]

Где:

  • переменная — идентификатор некоторой переменной,
  • последовательность — последовательность значений, которые принимает данная переменная (это может быть список, строка или объект, полученный с помощью функции range),
  • выражение — некоторое выражение, как правило, зависящее от использованной в генераторе переменной, которым будут заполнены элементы списка.

Важно! Все выражение должно быть заключено в квадратные скобки.

Вот несколько примеров использования генераторов:

Создать список, состоящий из n нулей, можно и с помощью генератора:


alist = [0 for i in range(100)]
        

Создать список, заполненный квадратами целых чисел, можно так:


n = 5
alist = [i ** 2 for i in range(n)]            
        

Создать список, заполненный целыми числами от 1 до n:


n = 10
alist = [i + 1 for i in range(n)]
        

А вот так можно получить список, заполненный случайными числами от 1 до 9 (используя функцию randrange() из модуля random):


from random import randrange

n = 10
alist = [randrange(1, 10) for i in range(n)]
        

7.3 Цикл в List Comprehension

List Comprehension можно использовать не только для генерации списков. В принципе, это просто компактный способ записи цикла for.

Например, с его помощью можно просто вывести некоторые значения из списка на экран:


alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
        

Или даже можно ввести значения с клавиатуры:


a = [input() for i in range(int(input()))]
        

В этом примере список будет состоять из строк, считанных со стандартного ввода: сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range), потом — заданное количество строк.

В привычном вам виде этот код будет выглядеть так:


n = int(input())
a = []
for i in range(n):
    x = input()  
    a.append(x)
        

Вообще, возможностей у List Comprehension довольно много:

Можно использовать условия:

Включение условий в выражение позволяет фильтровать элементы, например, можно создать список только из четных чисел:


[x for x in range(10) if x % 2 == 0]
        

Вложенные циклы:

Генератор позволяет использовать вложенные циклы, например, для создания многомерных массивов:


[(x, y) for x in range(3) for y in range(3)]
        
2
Задача
Модуль 1: Python Core, 5 уровень, 6 лекция
Недоступна
Генератор квадратов
Генератор квадратов
2
Задача
Модуль 1: Python Core, 5 уровень, 6 лекция
Недоступна
Фильтрация
Фильтрация
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Serhii Viktorovuch Уровень 15
29 августа 2025
I think it is a good way to solve the task, but the system does not accept it(( import random my_list = [x for x in random.sample(range(1, 100), 20)] print(my_list) my_new_list = [y for y in my_list if y % 2 == 0] print(my_new_list)
Ilya Shalaev Уровень 10
4 октября 2025
в условии сказано просто случайно число ,а ты используешь sample вместо randint ,так ты исключаешь повторения (зачем не понятно)
10 июля 2025
from random import randrange my_list = [randrange(1, 100) for i in range(20)] print (my_list) listik = [i for i in my_list if i % 2 == 0] print (listik)
Denis Shutov Уровень 9
29 июля 2025
Если не ошибаюсь, то при таком варианте: randrange(1, 100) 100 не зайдет в диапазон
Bigcrash Уровень 9
8 мая 2025
Прекрасный урок. Дана часть материала, даны задачи, решение которых частично разобрано на уроке, частично пришлось подумать. В итоге адекватно затраченные усилия обернулись в нормальное понимание материала.
qqw Уровень 14
10 января 2025
Первый урок в котором более-менее нормальные задачи на закрепление материала
Vitalii Уровень 12
29 декабря 2024
Побольше бы подобных заданий, после каждой лекции, для лучшего закрепления материала)👍
Alexander Уровень 21
28 декабря 2024
Последняя задача никак не была приведена в примерах урока. Решение не очевидно
Александр Уровень 19 Expert
6 января 2025
ну как же, вот первая часть решения: А вот так можно получить список, заполненный случайными числами от 1 до 9 (используя функцию randrange() из модуля random): from random import randrange n = 10 alist = [randrange(1, 10) for i in range(n)] а вот вторая часть: Можно использовать условия: Включение условий в выражение позволяет фильтровать элементы, например, можно создать список только из четных чисел: [x for x in range(10) if x % 2 == 0]
Сергей Уровень 10
15 августа 2024
В List Comprehension можно использовать и тернарный оператор if например: [x if x%2==0 else x*2 for x in range(10)] Результат: [0, 2, 2, 6, 4, 10, 6, 14, 8, 18] Обратите внимание, тут конструкция if else стоит перед for Если условие x%2==0 для текущего x верно, то добавляется x Иначе добавляется x*2