这是我的列表,已将其转换为iter
,然后转换为cycle
:
from itertools import cycle
lst = [1,2,3,4]
itr = iter(lst)
ccl = cycle(lst)
如何将其转换回list
-是否有from itertools import uncycle
?
我的最终目标是用random.shuffle
这是我的列表,已将其转换为iter
,然后转换为cycle
:
from itertools import cycle
lst = [1,2,3,4]
itr = iter(lst)
ccl = cycle(lst)
如何将其转换回list
-是否有from itertools import uncycle
?
我的最终目标是用random.shuffle
如评论中所述,您不能直接对生成器进行洗牌。您可以做的是用iterator.islice
切成薄片,直到列表的长度,然后随机播放:
from itertools import islice
uncycled = list(islice(ccl,len(lst)))
random.shuffle(uncycled)
print(uncycled)
# [2,1,4,3]
,
如果最终目标是循环整理列表,则无需玩“循环/切片,循环/取消循环”链。
您可以使用自定义生成器功能丰富目标:
from random import shuffle
def cycle_shuffled(lst):
lst = lst[:]
while True:
shuffle(lst)
yield lst
lst = [1,2,3,4]
gen = cycle_shuffled(lst)
print(next(gen)) # [3,1]
print(next(gen)) # [1,2]
print(next(gen)) # [2,1]