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