【问题标题】:Combining for and if loops结合 for 和 if 循环
【发布时间】:2013-04-27 09:30:59
【问题描述】:

我有代码:

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

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

【问题讨论】:

  • “我需要将它压缩到尽可能少的行”? 为什么?上下文相关的。
  • 微优化:您只检查每行的开头 (.startswith('for ')),因此您可以将 strip() 替换为 lstrip()

标签: python loops python-3.x


【解决方案1】:
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)

【讨论】:

  • 有趣的 TrueFalse 转换为 1 和 0。:-)
  • 非常感谢我想知道的内容
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 2017-08-06
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2021-07-30
    • 2022-07-05
    相关资源
    最近更新 更多