我有一个清单:
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)
您可以使用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列表):-)