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)]
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ