Как работают dict comprehension, list comprehension и set comprehension?
В Python comprehension — это короткий и читаемый способ создавать новые коллекции (списки, словари, множества) на основе уже имеющихся данных, часто с фильтрацией и преобразованием элементов.
Они позволяют заменить многострочный цикл одной компактной конструкцией.
1. List comprehension — создание списка
📌 Синтаксис:
[выражение for элемент in итерируемый_объект if условие]
Пример:
numbers = [1, 2, 3, 4, 5]
squares = [n ** 2 for n in numbers]
print(squares) # [1, 4, 9, 16, 25]
С фильтром:
even_squares = [n ** 2 for n in numbers if n % 2 == 0]
print(even_squares) # [4, 16]
2. Set comprehension — создание множества
📌 Почти как list comprehension, но в фигурных скобках:
numbers = [1, 2, 2, 3, 4, 4]
unique_squares = {n ** 2 for n in numbers}
print(unique_squares) # {16, 1, 4, 9}
📌 Особенность: автоматически удаляет дубликаты.
3. Dict comprehension — создание словаря
📌 Используется, когда нужно создать словарь из итерируемого объекта:
words = ["apple", "banana", "cherry"]
word_lengths = {word: len(word) for word in words}
print(word_lengths) # {'apple': 5, 'banana': 6, 'cherry': 6}
С фильтром:
short_words = {w: len(w) for w in words if len(w) <= 5}
print(short_words) # {'apple': 5}
4. Вложенные comprehension
Можно вкладывать, например, для матриц:
matrix = [[1, 2], [3, 4], [5, 6]]
flat = [num for row in matrix for num in row]
print(flat) # [1, 2, 3, 4, 5, 6]
5. Пример в автотестах (QA Automation)
📌 Получить список только упавших тестов:
test_results = {"test_1": "passed", "test_2": "failed", "test_3": "failed"}
failed_tests = [name for name, result in test_results.items() if result == "failed"]
print(failed_tests) # ['test_2', 'test_3']
📌 Преобразовать результаты тестов в словарь:
status_map = {name: (result == "passed") for name, result in test_results.items()}
print(status_map) # {'test_1': True, 'test_2': False, 'test_3': False}
Last updated
Was this helpful?