通过给定起点的列表进行迭代

时间:2015-10-07 16:15:42

标签: python list loops indexing iteration

假设您有一个列表,并且您有一个起点(例如第三个索引)。你将如何迭代从该索引开始的列表,然后循环访问列表中的所有元素?这意味着,您可以在列表中间开始迭代,但是一旦到达结束,您将从头开始继续,直到列表中的每个元素都被访问过。做这样的事最干净,最有效的方法是什么?理想情况下,我正在寻找对python伪for x in list starting with i:有效的东西。

2 个答案:

答案 0 :(得分:1)

如果您的列表很大并且您想避免复制列表的某些部分,那么您需要使用自定义迭代器:

def starting_with(arr, start_index):
     # use xrange instead of range in python 2
     for i in range(start_index, len(arr)):
        yield arr[i]
     for i in range(start_index):
        yield arr[i]

for value in starting_with(my_list, 3):
    ...

答案 1 :(得分:0)

您可以创建自己的迭代器函数,非常方便(并且有效),如下所示。

重要的是要注意,正如所写的,你可以传递一个负面索引,列表的长度有效添加到负索引,所以-2将意味着倒数第二个列表中的项 - 这正是Python本身通常处理列表负索引的方式。

try:
    xrange
except NameError:  # Python 3
    xrange = range

def starting_with(start_index, seq):
    if start_index > 0:
        start_index = start_index-len(seq)
    for i in xrange(start_index, len(seq)+start_index):
        yield seq[i]

for value in starting_with(3, my_list):
    ...