在python中,有没有一种方法可以循环遍历for循环中的列表?

2024-10-01 22:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python程序,它从一个名为“UserColorIndex”的预定义列表中打印颜色-我希望程序根据名为“NumberOfCircles”的变量的数值打印这些颜色。因此,如果NumberOfCircles的值中有100,那么程序应该从列表中打印这些颜色100次,如果索引只有9种颜色,那么程序应该循环使用这些颜色并重复使用这些颜色来打印它们。我尝试使用enumerate方法,但这只是创建了一种不同的数据类型。我将如何修复/执行此操作

这是我的密码:

NumberOfCircles = 18    # I don't know, just some random number, the program should work regardless of which number is placed 

def GenerateRosette():
    for i in range(NumberOfCircles):
        print(UserColorIndex[i])

UserColorIndex = ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet", "Black", "Grey"]

GenerateRosette()
Output:
________________

Red
Orange
Yellow
Green
Blue
Indigo
Violet
Black
Grey
Traceback (most recent call last):
  File "file.py", line 9, in <module>
    GenerateRosette()
  File "file.py", line 5, in GenerateRosette
    print(UserColorIndex[i])
IndexError: list index out of range
EXPECTED Output (What I want):
________________

Red
Orange
Yellow
Green
Blue
Indigo
Violet
Black
Grey
Red
Orange
Yellow
Green
Blue
Indigo
Violet
Black
Grey

在预期输出中,我希望根据for循环的运行次数(NumberOfCircles)打印列表。我想让它在列表中循环。我该怎么做?


Tags: 程序列表颜色greenblueredgreyblack
2条回答

我发现@Tim最初的解决方案很优雅,@Juanpa建议的改进很有洞察力。将这两者结合起来会产生以下代码片段,在我看来,它非常“python”:

import itertools

UserColorIndex = ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet", "Black", 
"Grey"]

def GenerateRosette(n):
    for color in itertools.islice(itertools.cycle(UserColorIndex), n):
        print(color)

NumberOfCircles = 16
GenerateRosette(NumberOfCircles)

简单的方法是使用itertools.cycle:

import itertools

UserColorIndex = ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet", "Black", 
"Grey"]

def GenerateRosette(n):
    color = itertools.cycle(UserColorIndex)
    for _ in range(n):
        print(next(color))

NumberOfCircles = 16
GenerateRosette(NumberOfCircles)

相关问题 更多 >

    热门问题