Python 3.x 在列表中循环迭代:从第一个循环中的项目X开始,然后遍历整个列表

Python 3.x 在列表中循环迭代:从第一个循环中的项目X开始,然后遍历整个列表,python-3.x,Python 3.x,我有一个属于我创建的类的对象列表: my_list = [item_1, item_2, item_3] 每个项目都有一个属性。属性 我有一个循环,其中列表中的项目被迭代,并用于调用函数和属性,如下所示: while True: for i in range(3): my_function(my_list[i].attribute) 我的问题是:我希望能够选择迭代从My_list上的项开始,但随着循环的继续,我希望下一次迭代从My_list开始。换句话说,我希望循环

我有一个属于我创建的类的对象列表:

my_list = [item_1, item_2, item_3]
每个项目都有一个属性
。属性

我有一个循环,其中列表中的项目被迭代,并用于调用函数和属性,如下所示:

while True:

    for i in range(3):
        my_function(my_list[i].attribute)
我的问题是:我希望能够选择迭代从
My_list
上的
项开始,但随着循环的继续,我希望下一次迭代从
My_list
开始。换句话说,我希望循环如下:

第2项->第3项->第1项->第2项->第3项->第1项..

或:

项目3->项目1->项目2->项目3->项目1…

与以下人员的标准行为相反:

项目1->项目2->项目3->项目1…


我不知道该怎么做,希望你能给我一些建议。谢谢。

使用
itertools中的
cycle
islice

for i in itertools.islice(itertools.cycle(my_list), start, stop):
    my_func(i.attribute)

start
stop
视为列表切片中的索引
重复列表[start:stop]
也许我只是误解了这个问题,但您可以简单地将对
my_函数的第一个调用放在for循环之外,然后在内部正常继续一次

my_function(my_list[3].attribute)
for i in range(3):
    my_function(my_list[i].attribute)

然后,您可以使用条件来确定在for循环之外调用了哪个
(或者是否调用了它)

你不是说骑自行车吗?谢谢。这个解决方案在一个范围内有效吗?因此,我可以使用
循环(范围(3))而不是
循环(我的\u列表
?是的,
range
对象是迭代器从我刚刚做的简短测试来看,这似乎不是我想要的。它正确地得到了第一次迭代,但是当它应该再次检查
my_列表时,它再次从指定的
start
from
itertools.islice
,用于循环itertools.islice中i的
(itertools.cycle(my_列表),1,3)
我得到的是:
索引1、索引2、索引1、索引2、索引1、索引2……
而我需要的是:
索引1、索引2、索引0、索引1、索引2、索引0……
如果您通过
islice
开始和
停止的
islice
则只会给您两个值。使用
itertools.islice>(itertools.cycle(my_list),1,None)
让它无限期地继续运行。您不需要将它包装在while循环中