如何取消循环的迭代器?

这是我的列表,已将其转换为iter,然后转换为cycle

from itertools import cycle

lst = [1,2,3,4]
itr = iter(lst)
ccl = cycle(lst)

如何将其转换回list-是否有from itertools import uncycle

我的最终目标是用random.shuffle

对其进行改组
happy_lele 回答:如何取消循环的迭代器?

如评论中所述,您不能直接对生成器进行洗牌。您可以做的是用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]
本文链接:https://www.f2er.com/3158777.html

大家都在问