2012-10-20 48 views
2
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 

我知道pear将永远是我列表中的一个项目(不是位置虽然),我正在寻找一种方法来获取该列表中的下一个项目的值,或者通过获取当前的键通过知道它的价值并且通过一个(像我在上面的例子中那样)或者通过使用诸如my_list.next之类的东西来推进它。有没有办法通过了解当前项目的值来获取列表中的下一个项目?

回答

5
try: 
    pos = my_list.index('pear') 
    print my_list[pos + 1] 
    # orange 
except IndexError as e: 
    pass # original value didn't exist or was end of list, so what's +1 mean? 

你当然可以预先缓存的话,使用(认为它可能是迭代工具对配方)

from itertools import tee 
fst, snd = tee(iter(my_list)) 
next(snd, None) 
d = dict(zip(fst, snd)) 

但你失去的事实,不管它是在原来的列表,或只是没有一个合乎逻辑的下一个值。

2

使用此:

>>> my_list[my_list.index('pear') + 1] 
'orange' 

需要注意的是,如果这是在列表中的最后一个值,你会得到一个异常IndexError

1

您可以使用index在列表中找到某个特定值: -

try: 
    print my_list[my_list.index('pear') + 1] 
except (IndexError, ValueError), e: 
    print e 
2

而简单的解决方案已经给出了,如果你想这样做的一个通用的迭代,而不是一个列表,最简单的答案是使用itertools.dropwhile()

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' 

请注意,如果您正在处理列表,则这是一个较慢且不易读的解决方案。这只是一个替代情况的说明。

你也可以产生一个版本更具描述性的错误:

​​
相关问题