【问题标题】:List Comprehensions break inner loop列表理解打破内循环
【发布时间】:2018-10-07 21:07:54
【问题描述】:
keyword = ['air','water' ,'fire','earth']
actual = ['air','water earth']
new = []

for a in actual:
    for k in keyword:
        if k in a:
           new.append(a)
           break

print("\n".join(new))
#air
#water earth

如果没有break,它将打印

#air
#water earth
#water earth

如何将其转换为列表理解并使用关键字break

我的代码是

[new.append(a) for a in actual for k in keyword if k in a]

请帮帮我。

【问题讨论】:

  • 你想做什么? “空气”中的“空气”这是什么检查?
  • 你不需要在列表理解中追加
  • 您能否更具体地说明您要实现的目标

标签: python python-3.x python-2.7 list list-comprehension


【解决方案1】:

您可以更改您对自己状况的看法,例如:

In []:
new = [a for a in actual if any(k in a for k in keyword)]
print(new)

Out[]:
['air', 'water earth']

长格式如下:

new = []
for a in actual:
    if any(k in a for k in keywords):
        new.append(a)

这在功能上相当于带有break的内循环,因为any()会短路。

【讨论】:

  • 这样的事情让你意识到 Python 是多么美丽的语言。
  • 谢谢,这正是我想要的。我就做[new.append(a) for a in actual if any(k in a for k in keyword)],这样就不用再循环了,可以节省处理时间
  • 你不应该在推导中使用new.append(),而只是new = [a for a ...],你会用你的方法不必要地构建2个列表,并且通常不赞成使用列表推导来解决副作用。
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多