【问题标题】:Assignment in python for loop possible?python for循环中的赋值可能吗?
【发布时间】:2011-03-05 05:53:35
【问题描述】:

我有一本字典 d(和一个单独的排序键列表,keys)。我希望循环只处理值为False 的条目 - 所以我尝试了以下操作:

for key in keys and not d[key]:
 #do foo

我想我对 python sytax 的理解不是我想象的那样 - 因为分配不应该发生在上面,并且我得到一个实例化错误。

以下内容当然可以,但我真的很希望能够使用类似于上面的代码的东西.. 可能吗?

for key in keys:
 if d[key]: continue
  #foo time!

谢谢!

【问题讨论】:

  • 你的解决方案真的是最明显最好的。

标签: python syntactic-sugar


【解决方案1】:

为此使用基因。

for key in (k for k in keys if not d[k]):
   ....

【讨论】:

  • 从问题来看,我认为应该是'if not d[k]'。
  • 我不鼓励这样做,因为它并不比 if cond: continue 好多少,而且它不容易允许多个条件(此外,您正在添加一个生成器只是“酷”因素的表达......是的,你可以做到,但它不会让代码更容易理解,也不会让它更快(我假设它会让它变慢))
【解决方案2】:

如果您的 dict 是相反的(如果应该扫描该值,则为真),您可以使用:

for key in filter(d.get, keys):
    ...

【讨论】:

  • ... 对于 False 情况,您可以将其扩展到 filter(lambda x: not d[x], keys)
【解决方案3】:
import itertools as it

for key in it.ifilterfalse(d.get, keys):
   ...

itertools 通常提供将功能打包到迭代中的最佳方法 (==loops;-)。

【讨论】:

  • 啊,这很酷 - itertool 每天都有新礼物 - 谢谢 Alex!
猜你喜欢
  • 2014-01-21
  • 2019-12-27
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 2021-11-05
  • 2016-01-17
相关资源
最近更新 更多