有没有办法循环索引
Is there a way to cycle through indexes
list1 = [1,2,3,4]
如果我有如上所示的list1
,最后一个值的索引是3
,但是有没有办法让我说list1[4]
,它会变成list1[0]
?
你可以像这样对数学取模:
代码:
list1 = [1, 2, 3, 4]
print(list1[4 % len(list1)])
结果:
1
在你描述的情况下,我自己使用@StephenRauch建议的方法。但是鉴于您添加了 cycle
作为标签,您可能想知道是否存在 itertools.cycle.
这样的东西
它 returns 一个迭代器,让您以循环方式永远循环遍历可迭代对象。我不知道你原来的问题,但你可能会发现它有用。
import itertools
for i in itertools.cycle([1, 2, 3]):
# Do something
# 1, 2, 3, 1, 2, 3, 1, 2, 3, ...
不过要小心退出条件,你可能会发现自己陷入了无限循环。
您可以实现自己的 class 来执行此操作。
class CyclicList(list):
def __getitem__(self, index):
index = index % len(self) if isinstance(index, int) else index
return super().__getitem__(index)
cyclic_list = CyclicList([1, 2, 3, 4])
cyclic_list[4] # 1
特别是这将保留 list
的所有其他行为,例如切片。
list1 = [1,2,3,4]
如果我有如上所示的list1
,最后一个值的索引是3
,但是有没有办法让我说list1[4]
,它会变成list1[0]
?
你可以像这样对数学取模:
代码:
list1 = [1, 2, 3, 4]
print(list1[4 % len(list1)])
结果:
1
在你描述的情况下,我自己使用@StephenRauch建议的方法。但是鉴于您添加了 cycle
作为标签,您可能想知道是否存在 itertools.cycle.
它 returns 一个迭代器,让您以循环方式永远循环遍历可迭代对象。我不知道你原来的问题,但你可能会发现它有用。
import itertools
for i in itertools.cycle([1, 2, 3]):
# Do something
# 1, 2, 3, 1, 2, 3, 1, 2, 3, ...
不过要小心退出条件,你可能会发现自己陷入了无限循环。
您可以实现自己的 class 来执行此操作。
class CyclicList(list):
def __getitem__(self, index):
index = index % len(self) if isinstance(index, int) else index
return super().__getitem__(index)
cyclic_list = CyclicList([1, 2, 3, 4])
cyclic_list[4] # 1
特别是这将保留 list
的所有其他行为,例如切片。