【问题标题】:How can I combine a conditional with a for loop in Python?如何在 Python 中将条件与 for 循环结合使用?
【发布时间】:2018-08-21 08:39:45
【问题描述】:

我写了一个简单的例子。我认为可以在 Python 中以最小的努力组合 if 语句和 for 循环。给定:

sublists = [number1, number2, number3]

for sublist in sublists:
    if sublist:
        print(sublist)

我认为我可以将 for 循环压缩为:

for sublist in sublists if sublist:

但这会导致语法无效。我对这个例子并不太特别,我只想要一个简单的 if 语句和循环的方法。

【问题讨论】:

  • 您可以使用filter 或列表解析/生成器表达式,但它可能不会比第一个版本更短,并且可能不太可读。只需使用第一个版本。
  • 我相信 python 语法没有为此提供任何特殊的简洁形式,除了你只想创建一个新的可迭代的情况。如果你真的想更一般地循环,你可以从答案中出现的各种选项中选择你的风格,或者坚持你的白痴原始风格。这个没有糖..

标签: python for-loop syntax simplification


【解决方案1】:

如果您想从原始子列表中过滤掉所有空子列表,则必须执行以下操作。这将为您提供所有非空子列表。

print([sublist for sublist in sublists if sublist])

*语法编辑

【讨论】:

  • 就是这个,好干净!虽然认为它打印需要 (),但我会将其标记为答案,因为这正是我想要的。
  • 谢谢你,很高兴我能帮上忙 :) 干杯!
【解决方案2】:

我发布后立即在解释器中解决了这个问题。

for x in ( x for x in sublists if x ):

没有我想要的那么干净,我认为嵌套的 if 语句更具可读性。如果有更清洁的方法,我愿意接受其他建议。

【讨论】:

  • 最接近 OP 正在寻找的风格,但对于许多会很快阅读此行的人来说可能不太清晰。行数更少,但并不比原版更简洁。
【解决方案3】:

我认为你不能在 python 中将语法简化为单行,但确实必须输入所有链接 for 循环和 if 语句的行。

列表解析是一个例外(see here at 5.1.3)。它们可用于从列表中生成新列表。一个例子:

test_list = ["Blue Candy", "Apple", "Red Candy", "Orange", "Pear", "Yellow Candy"]
candy_list = [x for x in test_list if "Candy" in x]

【讨论】:

  • 谢谢,我会更多地阅读理解,因为这似乎是解决这类问题的最佳方法。
  • 我可以在这里包含一个 else 语句吗?
  • 可能只需要做第二条语句:candy_list = [x for x in test_list if "Candy" in x]
猜你喜欢
  • 1970-01-01
  • 2018-12-10
  • 2018-01-02
  • 2013-07-18
  • 1970-01-01
  • 2015-08-12
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多