假设我有这个列表:
li = ["a", "b", "a", "c", "x", "d", "a", "6"]就 help 显示的内容而言,没有内置函数返回最后一次出现的字符串(就像 index 的反面).所以基本上,我怎样才能找到给定列表中 "a" 的最后一次出现?
解决方案如果您实际上只使用示例中所示的单个字母,那么 str.rindex 会很方便.如果没有这样的项目,这将引发 ValueError,与 list.index 相同的错误类将引发.演示:
>>>li = ["a", "b", "a", "c", "x", "d", "a", "6"]>>>''.join(li).rindex('a')6对于更一般的情况,您可以在反向列表上使用 list.index:
>>>len(li) - 1 - li[::-1].index('a')6这里的切片创建了整个列表的副本.对于短列表来说这很好,但是对于 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') 6For the more general case you could use list.index on the reversed list:
>>> len(li) - 1 - li[::-1].index('a') 6The 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 列表中找到最后一次出现的项目
发布评论