Можно ли поместить time.sleep(n) в понимание списка?

Можно ли поставить 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]

5 ответов

Если условие в списке понимания может быть одним из вариантов для случая.

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 if time.sleep(1) is None]

Нет, и код, который у вас есть, не получит то, что (я подозреваю) вы хотите.

print [some comprehension] будет просто производить весь список. Я думаю, что вы хотите каждый элемент. Чтобы сделать это, вы должны перебрать список. Что-то вроде:

for val in list:
    print val

Тогда вы могли бы:

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

для желаемого эффекта.

Как правило, вы не можете ставить утверждения (такие вещи, как print, importи т. д.) в пределах понимания. Это случаи, когда все, что вы делаете с пониманием, должно быть выполнено в виде цикла. Многие люди воспринимают понимание как сокращение для циклов, но это не правильно. Понимания являются лишь сокращением для создания объекта (что также может быть выполнено с помощью цикла)

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

В python2 вы не можете этого сделать, потому что print не является функцией, но вы можете сделать это в python3, если не возражаете против создания фиктивного списка в процессе. В python2 вы можете определить функцию для печати и затем сделать:

def p(x)
    print x

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

При этом печать происходит каждые 0,2 секунды. Список [(Нет, Нет), (Нет, Нет),...] создается и удаляется по завершении списка.

Примеры цикла for, вероятно, являются гораздо лучшим выбором. (разница между "может" и "должен")

      from time import sleep

lista_num = [list(range(1,4)),list(range(4,7)),list(range(7,10))]

[[print(numero) for numero in matriz if sleep(1) is None] for matriz in lista_num]
Другие вопросы по тегам