← Все вопросы

Что такое list comprehension и как он упрощает ваш код?

Задан 2 месяца назад38 просмотров2 ответа
1

Напишите пример, где list comprehension заменяет обычный цикл. В каких случаях его использование оправдано, а когда лучше вернуться к обычному for?

2 ответа

2

list comprehension — это цикл, сжатый до выражения, которое сразу собирает список.

Разворачиваю на своём типичном коде. Было:

prices = []
for row in rows:
    if row['status'] == 'ok':
        prices.append(float(row['price']))

Стало:

prices = [float(row['price']) for row in rows if row['status'] == 'ok']

Одна строка вместо четырёх, и читается как фраза: «собери float от price по строкам, где статус ok». Плюс не нужно заранее готовить пустой список.

Когда возвращаюсь к обычному for: если внутри нужны побочные действия (печать, запись в файл), если логика перестаёт влезать в одну мысль, если появляется вложенность. Comprehension хорош, пока его можно прочитать вслух не сбившись. Дальше он превращается в ребус.

1

Практический ориентир: не влезает в одну строку — разворачивайте в обычный цикл, не потеряете ничего. Вложенные варианты вроде [x for row in matrix for x in row] законны, но читаются через раз; два if или if-else внутри — почти всегда зря.

Ваш ответ

, чтобы ответить на вопрос.