是否可以在列表理解中加入time.sleep(n)?

时间:2014-06-20 19:56:37

标签: python python-2.5

是否可以在列表推导中放置time.sleep(n)来打印列表中的每个项目,每次打印之间有延迟?

import random, time

outside_lights = ['LED_fgate',
    'LED_rgate',
    'LED_mandoor',
    'LED_garage',
    'LED_garWin',
    'LED_rgb',
    'LED_deckOld',                 
    'LED_deckNew',
    'LED_cleartube',                  
    'LED_cleartube2'
]

random.shuffle(outside_lights, random.random)

print [i for i in outside_lights]

4 个答案:

答案 0 :(得分:4)

不,你在那里的代码不会得到你想要的(我怀疑)。

print [some comprehension]将只生成整个列表。我想你想要每个项目。为此,您必须遍历列表。类似的东西:

for val in list:
    print val

然后你可以:

for val in [your list comprehension]:
    print val
    time.sleep(n)

达到预期的效果。

作为一般规则,您不能将statements(像printimport之类的东西)放在理解中。在这些情况下,无论你在理解中做什么都必须作为一个循环来完成。许多人认为理解是循环的简写,但这不正确。理解只是对象创建的简写(也可以通过循环来实现)

答案 1 :(得分:2)

如果列表理解中的条件可以是案例的一个选项。

{{1}}

答案 2 :(得分:1)

for i in outside_lights:
    time.sleep(10)
    print i

答案 3 :(得分:1)

你不能在python2中因为打印不是一个函数,但如果你不介意在这个过程中创建一个虚拟列表,你可以在python3中。在python2中,您可以定义一个print函数,然后执行:

def p(x)
    print x

[(p(i), time.sleep(.2) for i in outside_lights]

这样,打印每0.2秒发生一次。列表完成后,将创建并放弃[(None,None),(None,None),...]列表。

for循环示例可能是更好的选择。 (' can'和#39;应该')

之间的差异