← Назад к вопросам

Только ли список можно сделать через List Comprehension

2.0 Middle🔥 161 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Comprehensions в Python: не только списки

Нет, list comprehension — это только одна из разновидностей comprehensions в Python. На самом деле Python поддерживает четыре типа comprehensions: для списков, словарей, множеств и генераторов.

Типы comprehensions

1. List Comprehension (для списков)

Это самый распространённый и известный вид:

# Создание списка чисел от 0 до 9
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# С условием
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]

2. Set Comprehension (для множеств)

Аналогично list comprehension, но с фигурными скобками и возвращает set вместо списка:

# Уникальные квадраты
uniqueSquares = {x**2 for x in range(10)}
print(uniqueSquares)  # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

# Пример: удаление дубликатов
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = {x for x in numbers}
print(unique)  # {1, 2, 3, 4}

3. Dictionary Comprehension (для словарей)

Создаёт словарь через comprehension синтаксис:

# Создание словаря с ключами и значениями
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Трансформация существующего словаря
old_dict = {a: 1, b: 2, c: 3}
new_dict = {key: value*2 for key, value in old_dict.items()}
print(new_dict)  # {a: 2, b: 4, c: 6}

# С условием
filtered = {k: v for k, v in old_dict.items() if v > 1}
print(filtered)  # {b: 2, c: 3}

4. Generator Expression (для генераторов)

Это как list comprehension, но возвращает generator object вместо списка (экономит память):

# Generator expression использует круглые скобки
squares_gen = (x**2 for x in range(1000000))
print(type(squares_gen))  # <class generator>

# Генератор не вычисляет все значения сразу
first = next(squares_gen)  # Только вычисляет первый элемент
print(first)  # 0

# Полезно для больших данных
total = sum(x**2 for x in range(1000000))  # Память не переполнится
print(total)

Сравнение производительности

import sys

# List comprehension
list_comp = [x**2 for x in range(10000)]
print(f"List size: {sys.getsizeof(list_comp)} bytes")

# Generator expression
gen_expr = (x**2 for x in range(10000))
print(f"Generator size: {sys.getsizeof(gen_expr)} bytes")

Генератор занимает значительно меньше памяти!

Практические примеры

# Извлечение имён всех пользователей из списка словарей
users = [
    {name: Alice, age: 25},
    {name: Bob, age: 30},
    {name: Charlie, age: 35}
]

names = [user[name] for user in users]
print(names)  # [Alice, Bob, Charlie]

# Создание словаря из списка
names_ages = {user[name]: user[age] for user in users}
print(names_ages)  # {Alice: 25, Bob: 30, Charlie: 35}

# Уникальные домены из списка email
emails = [user@example.com, admin@example.com, user@other.com]
domains = {email.split(@)[1] for email in emails}
print(domains)  # {example.com, other.com}

Когда использовать каждый тип

  • List comprehension — когда нужен обычный список с трансформацией
  • Set comprehension — для уникальных элементов и быстрого поиска
  • Dict comprehension — для создания или трансформации словарей
  • Generator expression — для больших данных, когда нужна экономия памяти

Все эти инструменты делают код более читаемым, компактным и pythonic.

Только ли список можно сделать через List Comprehension | PrepBro