Перейти до основного вмісту
Модуль 6 · Урок 1 із 421/36 у курсі~12 min
Модульні уроки (1/4)

Розуміння списку

Розуміння списку — це вираз, який створює список шляхом застосування перетворення (і необов’язково фільтр) до ітерованого. Це Pythonic спосіб написати for + append в одному рядку.

Python
# stile imperativo (verboso)
quadrati = []
for n in range(5):
    quadrati.append(n * n)

# stile pythonico
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]

Повний синтаксис

Python
[espressione for elemento in iterabile if condizione]
  • вираз: що додати до результуючого списку
  • for element in iterable: вихідний цикл
  • умова якщо (необов’язково): зберігає лише елементи, які збігаються
Python
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]

maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']

lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']

if/else всередині виразу (трійковий)

Щоб перетворити умовно (а не фільтрувати), використовуйте потрійний код вираз ПЕРЕД for:

Python
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]

Multi-for: декартовий добуток

Ви можете вкладати кілька речень for:

Python
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]

Порядок речень for "зовнішній-перед внутрішнім", ніби вони були вкладені цикли.

Коли НЕ слід використовувати розуміння

  • Складна логіка з багатьма вкладеними гілками if/else → використовуйте явний цикл.
  • Побічні ефекти (друк, запис у файл) → цикл, а не розуміння.
  • Більше 2 вкладених рівнів → явний іменований цикл майже завжди кращий.

Розуміння вкладених списків

Ви можете об’єднати кілька циклів for в межах одного розуміння списку. Наприклад, щоб звести матрицю (список списків) в єдиний плоский список, ви можете написати:

Python
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]

Порядок циклів точно відображає порядок вкладеності традиційних циклів for.

Спробуйте

вправи#python.m6.l1.e1
Спроби: 0Завантаження…

Якщо задано `nums = [1, 2, 3, 4, 5, 6]`, побудуйте `even_squares` з квадратів лише парних чисел. Оцініть `парні_квадрати`.

Завантаження редактора…
Показати підказку

якщо n % 2 == 0 в кінці.

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m6.l1.e2
Спроби: 0Завантаження…

Враховуючи `words = ['Ciao', 'Mondo', 'Python', 'Java']`, побудуйте `lengths` з довжиною КОЖНОГО слова, а `short_words` лише зі словами, коротшими за 5 символів. Оцініть `(lengths, short_words)`.

Завантаження редактора…
Показати підказку

Два окремих розуміння.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m6.l1.e3
Спроби: 0Завантаження…

Use a list comprehension to calculate the squares of only the even integers between 1 and 10 inclusive. Store the list in `even_squares` and evaluate it.

Завантаження редактора…
Показати підказку

Використовуйте діапазон (1, 11) для повторення, якщо x % 2 == 0 для фільтрування та x**2 як вираз.

Рішення доступне після 3 спроб