首页 > 解决方案 > 使用环绕遍历所有连续元素对(或三元组)

问题描述

我发现了许多类似的问题,但没有一个与环绕方面有关。

我正在处理一些代码,其中有很多列表,其中一个项目连接到以下项目,甚至是以下项目和上一个项目。因此我得到了很多这种模式,虽然有时我只使用current_itemand following_item,所以没有previous_item.

for i in range(len(my_list)):
    current_item = my_list[i]
    following_item = my_list[(i + 1) % len(my_list)]
    previous_item = my_list[(i - 1) % len(my_list)]

或者,使用enumerate

for i, current_item in enumerate(my_list):
    following_item = my_list[(i + 1) % len(my_list)]
    previous_item = my_list[(i - 1) % len(my_list)]

对我来说,这两者似乎都不是很“pythonic”。有没有一种很好的pythonic方式来做到这一点?我已经看到了一些相关问题的答案,他们在其中做类似的事情zip(my_list, my_list[1:]),但这并没有环绕,我也没有看到一个很好的方法来扩展它以包含前一个项目。

标签: python

解决方案


可能您正在寻找这样的东西:

mylist = [1,2,3,4,5,6,7,8,9,10]
for previous, current, following in zip([mylist[-1]] + mylist[:-1], mylist, mylist[1:] + [mylist[0]]):
    print(previous, current, following)

在这里,我简单地使用了 zip 和列表连接。


推荐阅读