Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有办法通过了解当前项来获取列表中的下一项';s值多少?_Python_List_Key - Fatal编程技术网

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