Python 在具有不同起始索引的列表上完全循环
所以我有这个清单Python 在具有不同起始索引的列表上完全循环,python,list,Python,List,所以我有这个清单 station_list = [1, 2, 3, 4] 这是一个示例,实际列表可能更长,但始终是整数递增的模式。作为代码的一部分,如果满足了某些条件,我希望在与1不同的点访问该列表。 假设我想从2开始迭代。如何使用从2开始的for循环迭代列表,但仍然只获得一次所有元素? 所以迭代顺序应该是2,3,4,1您可以这样做: station_list = [1, 2, 3, 4] start = 1 # item = 2 is at index position 1! for it
station_list = [1, 2, 3, 4]
这是一个示例,实际列表可能更长,但始终是整数递增的模式。作为代码的一部分,如果满足了某些条件,我希望在与1不同的点访问该列表。
假设我想从2开始迭代。如何使用从2开始的for循环
迭代列表,但仍然只获得一次所有元素?
所以迭代顺序应该是2,3,4,1
您可以这样做:
station_list = [1, 2, 3, 4]
start = 1 # item = 2 is at index position 1!
for item in (station_list[start:] + station_list[:start]):
# your code here
这将产生:
[2, 3, 4, 1]
您可以了解有关python切片的更多信息
如果您想在Python中获得关于列表的额外信息,可能会有所帮助。简单方法:使用原始列表中的两个块构建重新排序的列表:
station_list = [1, 2, 3, 4]
start = 1
for i in station_list[start:] + station_list[:start]:
print (i)
如果不想构建重新排序的桩号列表,可以使用索引换行:
station_list = [1, 2, 3, 4]
start = 1
n = len(station_list)
for i in range(n):
print (station_list[(i+start)%n])
这可以通过简单的collections.deque实现,然后使用任何索引进行旋转
from collections import deque
d = deque([1, 2, 3, 4])
d.rotate(-1)
print (d)
输出:
deque([2, 3, 4, 1])
首先,将一个可见列表定义为where
#代码>位于。(即,在定义列表之后。)
然后,定义你的开始
start = 2
这是循环部分
for n in range(start, list_length): # starts at position you desire...
print(int_list[n])
seen.append(int_list[n])
如果你从一个与起点不相等的位置开始,这个循环会再次返回
if int_list != seen: # if there are still some ints at start, go redo the loop until a seen int is found
for x in range(0, list_length):
print(int_list[x])
seen.append(int_list[x])
if int_list[x+1] in seen:
break
整个代码:
int_list = [1, 2, 3, 4, 5, 6]
seen = []
start = 2
list_length = len(int_list)
for n in range(start, list_length): # starts at position you desire...
print(int_list[n])
seen.append(int_list[n])
if int_list != seen:
# if there are still some ints at start, go redo the
#loop until a seen int is found
for x in range(0, list_length):
print(int_list[x])
seen.append(int_list[x])
if int_list[x+1] in seen:
break
没有那么紧凑,但它能工作。谢谢!这正是我想要的:)切片唯一的缺点是它会返回列表的副本。不过,可以使用itertools进行另一个实现。
if int_list != seen: # if there are still some ints at start, go redo the loop until a seen int is found
for x in range(0, list_length):
print(int_list[x])
seen.append(int_list[x])
if int_list[x+1] in seen:
break
int_list = [1, 2, 3, 4, 5, 6]
seen = []
start = 2
list_length = len(int_list)
for n in range(start, list_length): # starts at position you desire...
print(int_list[n])
seen.append(int_list[n])
if int_list != seen:
# if there are still some ints at start, go redo the
#loop until a seen int is found
for x in range(0, list_length):
print(int_list[x])
seen.append(int_list[x])
if int_list[x+1] in seen:
break