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
fromitertools.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循环中