Python 是否有办法通过了解当前项来获取列表中的下一项';s值多少?
我知道,Python 是否有办法通过了解当前项来获取列表中的下一项';s值多少?,python,list,key,Python,List,Key,我知道,pear将始终是我列表中的一项(但不是位置),我正在寻找一种方法来获取该列表中下一项的值,或者通过了解当前键的值并将其向前推进一步来获取当前键(就像我在上面的示例中所做的那样)或者使用类似于“我的列表”的内容。下一步使用以下内容: my_list = ['apple', 'pear', 'orange', 'raspberry'] # I know that I'm always looking for pear. print 'pear' in my_list # prints Tr
pear
将始终是我列表中的一项(但不是位置),我正在寻找一种方法来获取该列表中下一项的值,或者通过了解当前键的值并将其向前推进一步来获取当前键(就像我在上面的示例中所做的那样)或者使用类似于“我的列表”的内容。下一步使用以下内容:
my_list = ['apple', 'pear', 'orange', 'raspberry']
# I know that I'm always looking for pear.
print 'pear' in my_list # prints True
# I want to be able to get a key by its value.
pear_key = my_list['pear'].key # should be 1
# Print the next item in the list.
print my_list[pear_key + 1] # should print orange
请注意,如果这是列表中的最后一个值,则会出现异常indexer
>>> my_list[my_list.index('pear') + 1]
'orange'
当然,您可以使用(认为这可能是itertools对配方)预缓存它
但是,您会丢失它是否在原始列表中,或者只是没有逻辑下一个值的事实。您可以使用
索引
覆盖列表来查找特定值:-
from itertools import tee
fst, snd = tee(iter(my_list))
next(snd, None)
d = dict(zip(fst, snd))
虽然已经给出了最简单的解决方案,但如果您希望在通用迭代器(而不是列表)上执行此操作,最简单的答案是使用: 可以这样使用:
import itertools
def next_after(iterable, value):
i = itertools.dropwhile(lambda x: x != value, iterable)
next(i)
return next(i)
请注意,如果您正在处理列表,那么这是一个较慢且可读性较差的解决方案。这只是另一种情况的说明
您还可以生成包含更多描述性错误的版本:
>>> next_after(iter(my_list), "pear")
'orange'
import itertools
def next_after(iterable, value):
i = itertools.dropwhile(lambda x: x != value, iterable)
next(i)
return next(i)
>>> next_after(iter(my_list), "pear")
'orange'
def next_after(iterable, value):
i = itertools.dropwhile(lambda x: x != value, iterable)
try:
next(i)
except StopIteration:
raise ValueError("{} is not in iterable".format(repr(value)))
try:
return next(i)
except StopIteration:
raise ValueError("{} is the last value in iterable".format(repr(value)))