计算后立即打印理解元素

时间:2018-03-31 10:08:57

标签: python list-comprehension

假设我希望计算和查看列表推导的结果,这需要一段时间来计算,但只返回少量结果;例如(人工例子),

L = [x for x in range(100000000) if x<10]; print(L)

是否有一种简单的方法可以在计算这些元素后立即打印这些元素,而不是最后一次?可以写一个装饰器来做它:

import sys

def print_as_computed(gen):
    try:
        while True:
            v = next(gen)
            print v
            sys.stdout.flush()
            yield v
    except StopIteration:
        pass

L1 = list(print_as_computed(x for x in range(10000000) if x<10))

但我想知道是否有内置功能,或更标准/ Pythonic方式。

1 个答案:

答案 0 :(得分:3)

如果你希望生成器函数的等价物具有明确的for语句,但是具有理解的简洁性,那就是生成器表达式的用途:

L = (x for x in range(100000000) if x<10)
for value in L: print(value)

如果你真的想把print填入表达式,你可以,虽然它绝对不是惯用的或可读的。例如:

L = (print(x) or x for x in range(100000000) if x<10)
L1 = list(L)

由于print(x)始终返回Noneprint(x) or x始终为x。 (同样,你不应该这样做 - 但是在你理解它之前,它值得研究它的工作原理。)

对于Python 2,如果你不使用from __future__ import print_function,如果你想要做同样的黑客攻击,你还必须创建一个类似print的功能,因为你可以&#39 ; t在表达式中使用语句:

def printify(s):
    print s

L = (printify(x) or x for x in range(100000000) if x<10)