Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在具有不同起始索引的列表上完全循环_Python_List - Fatal编程技术网

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