迭代Python列表,但第一个元素在末尾?

kit*_*fox 2 python

我有一个列表,我想从元素 1 到末尾迭代它,然后以元素 0 结束。即,本质上它是基本列表迭代,除了第一个元素应该位于末尾。

我可以这样做for i in range(len(myList)):,然后将 1 添加到 i 并检查边缘情况(这就是我在 C++ 中所做的),但想知道 Python 是否有一些语法可以使这个概念更容易表达?

kay*_*ya3 5

我不认为有一个方便的语法,但您可以轻松定义自己的语法:我irotate通过类比itertools.islice选择了名称,并以可提供一次性使用的方式编写它可迭代,例如生成器表达式。

def irotate(iterable, k=1):
    iterator = iter(iterable)
    initial_elements = [next(iterator) for _ in range(k)]
    yield from iterator
    yield from initial_elements
Run Code Online (Sandbox Code Playgroud)

用法示例:

>>> list(irotate(range(5)))
[1, 2, 3, 4, 0]
>>> for x in irotate(y**2 for y in range(5)): print(x)
... 
1
4
9
16
0
Run Code Online (Sandbox Code Playgroud)

  • @PacketLoss如果它是一个列表那么你可以使用切片,当然;然而,这种方式适用于 O(k) 辅助空间而不是 O(n),并且当可迭代不是列表或元组时才有效。 (5认同)