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