列表python的上一个和下一个项目

时间:2016-05-27 12:56:23

标签: python list

任何人都可以指出我获得列表上一个和下一个项目的实用方法。例如:

my_list = [100, 200, 300, 400]

是否有实用的方法来获取上一个和下一个项目(300和100)。

我正在使用my_list[my_list.index(400) - 1]成功获取上一个项目。 Python显然不介意获得负面指数。但是,如果我尝试使用my_list[my_list.index(400) + 1],则不希望索引大于列表中的项目数。这是有道理的。

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

我想我可以使用循环来循环并获得它 - 我只是希望有一个更简单的解决方案。我正在考虑使用iter(),但我似乎无法弄清楚是否可以设置索引。

4 个答案:

答案 0 :(得分:5)

您可以使用modolu运算符来&#34;循环&#34;围绕列表的边界:

>>> 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

答案 1 :(得分:5)

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

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

结果:

>> 100

答案 2 :(得分:0)

我想,当你在&#34;之后寻找下一个元素&#34; 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]

答案 3 :(得分:0)

您可以使用运营商%

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]