Python random.choice()顺序等价

Python random.choice()顺序等价,python,list,function,random,iteration,Python,List,Function,Random,Iteration,我知道使用for循环可以按顺序显示列表中的项目,但它只能一次显示它们 e、 g: 如果我用范围和长度来处理索引,也是一样的 但是random.choice()所做的是在列表中取一个随机项,然后在每次调用函数时打印它 e、 g: 是否有一个与random.choice()等效的方法,但用于在每次需要时按顺序打印列表中的项目 比如: 依此类推,直到打印列表中的最后一项,以便在下次打印时列表再次返回到第一个索引。您可以使用为列表中的值创建迭代器。然后使用访问下一个元素 values = [1, 2,

我知道使用for循环可以按顺序显示列表中的项目,但它只能一次显示它们

e、 g:

如果我用范围和长度来处理索引,也是一样的

但是random.choice()所做的是在列表中取一个随机项,然后在每次调用函数时打印它

e、 g:

是否有一个与random.choice()等效的方法,但用于在每次需要时按顺序打印列表中的项目

比如:

依此类推,直到打印列表中的最后一项,以便在下次打印时列表再次返回到第一个索引。

您可以使用为列表中的值创建迭代器。然后使用访问下一个元素

values = [1, 2, 4, 8]
data = iter(values)
print(next(data))
print(next(data))
在获得最后一个元素后,尝试调用
next
时,将出现
StopIteration
错误

values = [1, 2, 4, 8]
data = iter(values)
print(next(data))
print(next(data))
由于iter创建了一个迭代器,所以不能按顺序返回。如果你想从头开始,你必须用
data=iter(values)
创建一个新的迭代器

如果要在达到最后一个值后重复数据,可以使用

警告:不要试图从该迭代器构建列表,因为它是无限的。

您可以使用它为列表中的值创建迭代器。然后使用访问下一个元素

values = [1, 2, 4, 8]
data = iter(values)
print(next(data))
print(next(data))
在获得最后一个元素后,尝试调用
next
时,将出现
StopIteration
错误

values = [1, 2, 4, 8]
data = iter(values)
print(next(data))
print(next(data))
由于iter创建了一个迭代器,所以不能按顺序返回。如果你想从头开始,你必须用
data=iter(values)
创建一个新的迭代器

如果要在达到最后一个值后重复数据,可以使用


警告:不要试图从该迭代器构建列表,因为它是无限的。

您可以自己创建。
while循环将根据需要重新运行数字迭代。
收益率x表示“返回此值,但当再次调用时,我将从我停止的地方开始

编辑:必须捕捉空列表

def loop(lst):
    if lst:
        while True:
            for x in lst:
                yield x

你可以自己做。
while循环将根据需要重新运行数字迭代。
收益率x表示“返回此值,但当再次调用时,我将从我停止的地方开始

编辑:必须捕捉空列表

def loop(lst):
    if lst:
        while True:
            for x in lst:
                yield x


您提出的API中隐含的全局状态是一场可用性噩梦,也是大量bug的来源。自己跟踪索引,或者使用显式迭代器。我真的不明白这在什么意义上等同于随机选择。结果是等价的。但结果根本不等价。等等等等,怎么办?第6次调用
打印(函数(列表))
时会发生什么,?你想提供一个重启功能吗?你提议的API中隐含的全局状态是一个可用性噩梦,也是一个巨大的bug来源。自己跟踪索引,或者使用显式迭代器。我真的不明白这在什么意义上等同于随机选择。结果是等价的。但结果根本不等价。等等等等,怎么办?第6次调用
打印(函数(列表))
时会发生什么,?你想提供一个重启函数吗?我想,如果在一个函数上实现,你可以使用if返回到开始。谢谢。要回到开头,只需再次执行
data=iter(values)
。@idkman否,如果在函数中实现,则不能使用if返回开头。使用
iter
对象时,通过显式迭代或使用
next
函数,会消耗该对象。也许马提亚可以在他们的回答中澄清这一点。哦,有趣!谢谢你的澄清和回答!我想,如果在函数上实现,您可以使用if返回到开始。谢谢。要回到开头,只需再次执行
data=iter(values)
。@idkman否,如果在函数中实现,则不能使用if返回开头。使用
iter
对象时,通过显式迭代或使用
next
函数,会消耗该对象。也许马提亚可以在他们的回答中澄清这一点。哦,有趣!谢谢你的澄清和回答<代码>来自itertools导入周期感谢您的建议!我会试试。
cycle
有一个1.5步的建议,就是自己列一个清单,然后把空支票放进
:哦,我明白了。谢谢你告诉我。
来自itertools导入周期
谢谢你的建议!我会试试。
cycle
有一个1.5步的建议,就是自己列一个清单,然后把空支票放进
:哦,我明白了。谢谢你这么说。