python - 遍历列表 n 次

标签 python for-loop

<分区>

假设你有这个:

foo = [1,2,3,4,5,6,7,8,9,10]
bar = 22

我想从 foo 中获取 bar 多个值,在到达结尾后从头开始重复。所以对于这些输入,结果应该是 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9, 10,1,2

我有这个工作代码:

foo = [1,2,3,4,5,6,7,8,9,10]
bar = 22

x = 0

for i in range(bar):
    print(foo[x])

    # increment
    if x == 9:
        x = 0
    # back to 1
    else:
        x += 1

但是有没有更短的方法,它不使用临时变量 x

最佳答案

虽然 Kemp 的解决方案确实有效,但我相信更 pythonic 的解决方案是使用 itertools包裹:

import itertools
foo = [1,2,3,4,5,6,7,8,9,10]
bar = 22
for i in itertools.islice(itertools.cycle(foo), bar):
    print(i)

cycle在指定的可迭代对象上创建一个无限重复的迭代器。在我们使用 10 之后,迭代器将返回到 1

islice像典型的列表切片语法一样工作,但除了容器之外,它还适用于迭代器和生成器。我们可以使用它从迭代器中获取 bar 项。

这更灵活一些,因为它不要求 foo 是可订阅的。换句话说,这将在以下情况下起作用:

  • foo 是一个迭代器(例如 foo = iter(foo))
  • foo 是一个生成器(例如 foo = (x*2 for x in foo))
  • foo 是一个特殊的代理对象,如 dict_keysdict_values (例如 foo = {x: str(x) for x在 foo}.keys())

关于python - 遍历列表 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67823238/

相关文章:

python - 在 Tkinter 中为框架添加标签会忽略框架的属性

c++ - 可以循环遍历 C++ 中的数组结构

performance - 加快矩阵输入速度

python - int() 对象如何在 python2 中使用没有 __eq__() 方法的 "=="运算符?

python - 为什么我收到 AlreadyExistsError?

python - 使用 create_engine 从 SQLAlchemy 到 MSSQL

java - 均匀交叉比单点交叉产生更差的结果?

使用 r 中的 for 循环重新调整具有给定不同引用级别的许多变量

javascript - 使用 for 循环用逗号分隔值填充选择元素

Python:生成多个带空格的字符串组合