2013-05-03 3 views
2

У меня есть код:Объединение для и если петли

num_for_loops = 0 
for line in lines: 
    if line.strip().startswith('for '): 
     num_for_loops += 1 
return num_for_loops 

Мне нужно уплотнить его вниз как черточки, как это возможно. Есть ли способ сделать это, объединив утверждения for и if? Контекст не имеет значения.

+3

«Мне нужно конденсировать его как можно меньше линий»? ***Зачем***? Контекст * * имеет значение. – Johnsyweb

+0

Микро-оптимизация: вы проверяете только начало каждой строки ('.startswith ('for')'), поэтому вы можете заменить 'strip()' на 'lstrip()'. –

ответ

9
num_for_loops = sum(line.strip().startswith("for ") for line in lines) 

, так как вы сразу же возвращаетесь num_for_loops Я полагаю, вы на самом деле просто хотите

return sum(line.strip().startswith("for ") for line in lines) 
+0

Интересный перевод 'True' и' False' в 1 и 0. :-) –

+0

Спасибо, что я хотел знать – jevans

+0

+1 для такого питонского ответа – Pulimon

3

Генератора выражения всегда выигрывают краткий код конкурсы:

return sum(1 for line in lines if line.strip().startswith('for ')) 

Это порождает ряд 1s равного в длина к числу строк, начинающихся с 'for', суммируя список по мере его создания, чтобы вы могли анализировать терабайты данных без нехватки памяти.

Смежные вопросы