List Python:将项添加到列表中,直到条件为true

List Python:将项添加到列表中,直到条件为true,list,python,List,Python,正常的列表理解是这样发生的: new_list = [f(x) for x in l] 在Python中创建新列表的最简洁易读的方法是什么 new_list = [f(x) while condition is True] 使用: 这是一样的 new_list = [f(x) for x in it.takewhile(lambda x: condition(x), l)] 我可能会将其包装在生成器函数中: def generate_items(): while condition

正常的列表理解是这样发生的:

new_list = [f(x) for x in l]
在Python中创建新列表的最简洁易读的方法是什么

new_list = [f(x) while condition is True]
使用:

这是一样的

new_list = [f(x) for x in it.takewhile(lambda x: condition(x), l)]

我可能会将其包装在生成器函数中:

def generate_items():
    while condition:
        yield f(x)
new_list = list(generate_items)
保持简单:

new_list = []
while condition:
    new_list.append(f(x))

当某个表达式更清楚地写为单独的语句时,将其强制为一个表达式没有任何好处。

您可以跳过
列表
-调用并使用
map
而不是
imap
可以直接编写
takewhile(condition,l)
@Ben James-它是在第一个版本中编写的。第二个更详细,我明白了。对我来说,这并不是答案的一个重要元素,因为无用的lambda被使用得太多了。@Sven:对不起,请原谅我!我投票否决了-1,因为我认为这可能是一个很好的答案。我试着用takewhile编写一个版本,但没想到已经存在了一些iterable,我发现自己正在制作一个生成器(当时我决定@Duncan的答案显然是赢家)。条件是x或f(x)?顺便说一句,这比其他答案更灵活,因为OP从未说过
x
在迭代过程中不会发生变化,如果它真的在创建
一些可重用的
,那么它就不会是微不足道的。还有,我觉得没人会挑你的语法选择很有趣=)@Mu Ming:“我觉得没人会挑你的语法选择很有趣”既然你提到了,我发现命令式解决方案非常难看;-)但我们肯定应该知道一些关于这种情况的情况。。。它是在x上,f(x),都是,都不是?解决办法将有所不同。如果条件是x,则takewhile建议在我看来很好。
new_list = []
while condition:
    new_list.append(f(x))