Python 列表的上一项和下一项

Python 列表的上一项和下一项,python,list,Python,List,有谁能告诉我一种获取列表中前一项和下一项的实用方法吗。例如: my_list = [100, 200, 300, 400] 是否有切实可行的方法获得上一个和下一个项目300和100 我正在使用my_list[my_list.index400-1]成功获取上一项。Python显然不介意得到一个负索引。但是,如果我尝试my_list[my_list.index400+1],它不喜欢索引大于列表中的项数。这是有道理的 Traceback (most recent call last): File "

有谁能告诉我一种获取列表中前一项和下一项的实用方法吗。例如:

my_list = [100, 200, 300, 400]
是否有切实可行的方法获得上一个和下一个项目300和100

我正在使用my_list[my_list.index400-1]成功获取上一项。Python显然不介意得到一个负索引。但是,如果我尝试my_list[my_list.index400+1],它不喜欢索引大于列表中的项数。这是有道理的

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

我想我可以用一个循环来实现它——我只是希望有一个更简单的解决方案。我一直在考虑使用国际热核实验堆,但我似乎不知道是否有可能设置索引

我想,当你寻找400之后的下一个元素时;你想要第一个吗?那样的话只需查看列表的大小:

current_index = my_list.index(400)
next_index = current_index + 1
if (next_index == len(my_list)):
    next_index = 0

next_value = my_list[next_index]

您可以使用modolu操作符围绕列表的边框进行循环:

>>> my_list = [100, 200, 300, 400]
>>> val = 400
>>> my_list[(my_list.index(val) + 1) % len(my_list)] # next
100
>>> my_list[(my_list.index(val) - 1) % len(my_list)] # previous
300

一个简单的解决方案是使用模

my_list[ (my_list.index(400) + 1) % len(my_list) ]
结果:

>> 100
您可以使用运算符%

试验


你到底想做什么?你想让你有一个圆形容器吗?听说过模运算符吗?也许看到@Lost我想OP很清楚这一点。
def get_loop_item(my_list, item, spacing):
    if isinstance(spacing, int):
        return my_list[(my_list.index(item) + spacing) % len(my_list)]
    elif isinstance(spacing, list):
        return [get_loop_item(my_list, item, space) for space in spacing] 
    return None
>>> get_loop_item(my_list, 300, 1)
400
>>> get_loop_item(my_list, 300, -1)
200
>>> get_loop_item(my_list, 300, [-1, 1])
[200, 400]