Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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_Iteration - Fatal编程技术网

python中特定索引列表的完整迭代

python中特定索引列表的完整迭代,python,list,iteration,Python,List,Iteration,如何迭代从特定索引开始的列表 例如: lst = ["a", "b", "c", "d", "e", "f"] 我想从列表(3)开始迭代,它是“d”,但我想在所有元素上继续迭代。因此,它将按以下顺序迭代:“d”、“e”、“f”、“a”、“b”、“c” 有可能吗?您可以使用它从列表中生成循环迭代器。 然后从索引3开始,从迭代器中切片len(seq)元素 In [573]: seq = ["a", "b", "c", "d", "e", "f"] In [574]: import itertoo

如何迭代从特定索引开始的列表

例如:

lst = ["a", "b", "c", "d", "e", "f"]
我想从
列表(3)
开始迭代,它是
“d”
,但我想在所有元素上继续迭代。因此,它将按以下顺序迭代:
“d”、“e”、“f”、“a”、“b”、“c”

有可能吗?

您可以使用它从列表中生成循环迭代器。 然后从索引3开始,从迭代器中切片
len(seq)
元素

In [573]: seq = ["a", "b", "c", "d", "e", "f"]

In [574]: import itertools as IT

In [575]: list(IT.islice(IT.cycle(seq), 3, 3+len(seq)))
Out[575]: ['d', 'e', 'f', 'a', 'b', 'c']

可以使用列表切片来构建新的列表对象:

for elem in lst[3:] + lst[:3]:
这对于小列表是很好的;创建新的列表对象(用于切片和连接结果)足够便宜

演示:

为了完整性,(尽管我可能会选择Martijn/unutbu的方法):


如果您需要不断旋转数据,并从头开始或从头到尾反向遍历数据,那么这将更加有效。但是,这确实意味着您无法直接索引到
d
——因为它实际上是一个双链接列表。

这可以通过模(%)运算符轻松完成,而无需使用任何包:

>>> for i in range(3,3+len(lst)):
...    print lst[i%len(lst)],
... 
d e f a b c

不要命名变量
列表
。它将与内置的
列表发生冲突
()感谢您对其进行编辑。这同样有效,但由于我将使用此代码的列表相对较小,因此我选择Martijn的答案。非常感谢。Deques不是一个选项。我正在处理的代码在列表上迭代,直到满足条件为止。在迭代过程中,我有时会从列表中删除元素。用德克的你不能这么做。@krypt公平地说-从你的问题来看,这并不明显。。。在一个列表上迭代并删除元素听起来也像是一个灾难……是的,这不是问题的一部分。我只是想告诉你为什么deque的不是一个选择。无论如何,非常感谢你!
from collections import deque

lst = ["a", "b", "c", "d", "e", "f"]

d = deque(lst)
d.rotate(-3)
for el in d:
    # do something
>>> for i in range(3,3+len(lst)):
...    print lst[i%len(lst)],
... 
d e f a b c