2

我有代码:

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

我需要将其压缩为尽可能少的线条。有没有办法通过结合 for 和 if 语句来做到这一点?上下文无关紧要。

4

2 回答 2

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)
于 2013-05-03T03:31:32.330 回答
3

生成器表达式总是赢得简洁的代码竞赛:

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

这会生成一系列长度等于以“for”开头的行数的 1,并在生成列表时对列表求和,这样您就可以解析 TB 的数据而不会耗尽内存。

于 2013-05-03T03:35:12.930 回答