任何人都可以指出我获得列表上一个和下一个项目的实用方法。例如:
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()
,但我似乎无法弄清楚是否可以设置索引。
答案 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]