【问题标题】:I wonder if it is possible that break in list comprehension with any method such as takewhile or others我想知道是否有可能用任何方法(例如 takewhile 或其他方法)打破列表理解
【发布时间】:2019-12-26 23:31:09
【问题描述】:

这是一个示例代码,

def func():
    return something

# I want to break the list comprehension at the first None.
# The walrus := is valid in Python 3.8
items = [r for _ in range(100) if (r := func()) is not None]
# else break?

我想知道是否有可能用任何方法(例如 takewhile 或其他方法)打破列表理解?

【问题讨论】:

  • 这样的? [z for z in takewhile(lambda x:x<3,[1,2,3,4,5])](使用来自itertoolstakewhile
  • @ScottHunter 在这一点上,没有什么理由使用列表推导而不是直接将takewhile 实例传递给list
  • @chepner:我没说这是个好主意……
  • @ScottHunter 您的示例确实可以破坏它,但我想通过一些函数返回而不是 range(100) 来破坏它

标签: python list-comprehension


【解决方案1】:

列表理解,不;它基本上是mapfilter 的语法糖。但正如您所怀疑的,takewhilemap 将为list 提供合适的输入。

items = list(takewhile(lambda x: x is not None, map(func, ...)))

【讨论】:

  • items = list(takewhile(lambda x: x is not None, map(func, range(100)))),效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2012-07-10
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2015-10-28
相关资源
最近更新 更多