如何在 Python 列表中找到最后一次出现的项目 [英] How to find the last occurrence of an item in a Python list
问题描述
假设我有这个列表:
li = ["a", "b", "a", "c", "x", "d", "a", "6"]
就 help 显示的内容而言,没有内置函数返回最后一次出现的字符串(就像 index
的反面).所以基本上,我怎样才能找到给定列表中 "a"
的最后一次出现?
如果您实际上只使用示例中所示的单个字母,那么 str.rindex
会很方便.如果没有这样的项目,这将引发 ValueError
,与 list.index
相同的错误类将引发.演示:
对于更一般的情况,您可以在反向列表上使用 list.index
:
这里的切片创建了整个列表的副本.对于短列表来说这很好,但是对于 li
非常大的情况,使用惰性方法可以提高效率:
def list_rindex(li, x):对于 i in reversed(range(len(li))):如果 li[i] == x:返回我raise ValueError("{} 不在列表中".format(x))
单线版:
next(i for i in reversed(range(len(li))) if li[i] == 'a')
Say I have this list:
li = ["a", "b", "a", "c", "x", "d", "a", "6"]
As far as help showed me, there is not a builtin function that returns the last occurrence of a string (like the reverse of index
). So basically, how can I find the last occurrence of "a"
in the given list?
If you are actually using just single letters like shown in your example, then str.rindex
would work handily. This raises a ValueError
if there is no such item, the same error class as list.index
would raise. Demo:
>>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
>>> ''.join(li).rindex('a')
6
For the more general case you could use list.index
on the reversed list:
>>> len(li) - 1 - li[::-1].index('a')
6
The slicing here creates a copy of the entire list. That's fine for short lists, but for the case where li
is very large, efficiency can be better with a lazy approach:
def list_rindex(li, x):
for i in reversed(range(len(li))):
if li[i] == x:
return i
raise ValueError("{} is not in list".format(x))
One-liner version:
next(i for i in reversed(range(len(li))) if li[i] == 'a')
这篇关于如何在 Python 列表中找到最后一次出现的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!