Python 我想知道是否有可能使用takewhile或其他方法来打断列表理解

Python 我想知道是否有可能使用takewhile或其他方法来打断列表理解,python,list-comprehension,Python,List Comprehension,下面是一个示例代码 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或其他方法,

下面是一个示例代码

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或其他方法,打断列表理解?

列表理解,否;它基本上是映射和过滤器的语法糖。但takewhile和map将为列表提供合适的输入,正如您所怀疑的

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

像这样的?[z代表takewhilelambda x中的z:x@ScottHunter不过,在这一点上,没有什么理由使用列表理解而不是直接将takewhile实例传递给list。@chepner:我没说这是个好主意…@ScottHunter您的示例确实可以打破它,但我想通过一些函数来打破它,返回的不是range100items=listtakewhilelambda x:x不是无,mapfunc,range100,它工作得很好。谢谢!