在Python中迭代列表中的连续元素,使最后一个元素与第一个元素组合

Shu*_*m R 10 python

我有一个清单:

L = [1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

我想在列表中连续迭代等元素,当它涉及到最后一个元素i'e 8的第一个元素是对1.

我想要的最终输出是:

[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,1]
Run Code Online (Sandbox Code Playgroud)

我试过用这种方式:

for first,second in zip(L, L[1:]):
    print([first,second])
Run Code Online (Sandbox Code Playgroud)

但我只得到这个结果:

[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8]
Run Code Online (Sandbox Code Playgroud)

如何先制作一对最后一个元素?我听说过列表的负索引属性.

Kam*_*mil 13

您只需zip()使用仅包含第一项的列表扩展第二个列表,例如:

for first, second in zip(L, L[1:] + L[0:1]):  # or simply zip(L, L[1:] + L[:1])
    print([first, second])
Run Code Online (Sandbox Code Playgroud)


Reu*_*ani 6

您可以使用cycle循环列表(结合islice跳过第一个元素):

from itertools import cycle, islice

L = [1,2,3,4,5,6,7,8]
rest_L_cycled = islice(cycle(L), 1, None)
items = zip(L, rest_L_cycled)
print(list(items))
Run Code Online (Sandbox Code Playgroud)

这很容易扩展.请注意,它依赖于在zip较短列表上暂停的事实(第二个参数是无限循环).它也懒得做所有事情,并没有创建任何中间列表(好吧,除了printed列表):-)