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)]
        
Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Ростислав Рівень 22
15 лютого 2025
# Створюємо список з 20 випадкових чисел від 1 до 100 random_numbers = [random.randint(1, 100) for _ in range(20)]