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