问题描述
我在 Python
中有一个列表
lst=['a','b','c','d','e','f']
例如我想得到:
next_element(lst,'c')
# 'd' should return adjacent value of 'c'
Pythonian 的做法是什么?
解决方法
您可以使用 next()
内置函数:
some_list = ['a','b','c','d','e','f']
random_iterator = iter(some_list)
print(next(random_iterator)) #Output = a
print(next(random_iterator)) #Output = b
next()
的语法是:
next(iterator,default)
-
iterator
—next()
从iterator
中检索下一项
-
default
(可选)——如果迭代器是 筋疲力尽(没有下一项)
-
next()
函数从迭代器返回下一项。 - 如果迭代器耗尽,则返回作为传递的
default
值 一个论点。 - 如果省略了
default
参数并且迭代器耗尽, 它引发了StopIteration
异常。
这个函数应该做你想做的 - 我认为使用 index 方法将是解决你的问题的最 Python 方式 - 虽然我可能是错的,这就是我的想法。
def next_element(lst,element):
idx = lst.index(element)
return lst[idx +1]
,
这是一个简单的方法
def next_element(l,elt):
return l[l.index(elt)+1]
如果传入函数的元素是列表中的最后一个,这将引发错误。您可能想要添加一些逻辑来处理该问题,具体取决于您的需求。此外,这假设列表中的所有元素都是唯一的。
但是,对于大列表,此解决方案会非常慢。 list.index
逐个元素搜索列表直到找到正确的元素,所以它在 O(n) 中运行。如果您尝试遍历列表但不想使用循环,则可以根据需要创建迭代器来遍历列表。
lst = ['a','f']
myit = iter(lst)
next(myit) # will return 'a'
next(myit) # will return 'b'