假设我有这个列表:
li = ["a", "b", "a", "c", "x", "d", "a", "6"]据help介绍,没有一个内置函数可以返回字符串的最后一个匹配项(就像index的反面一样)。那么基本上,我如何在给定的列表中找到"a"的最后一个匹配项?
发布于 2014-05-23 04:04:48
类似于Ignacio的一行代码,除了更简单/更清晰之外,应该是
max(loc for loc, val in enumerate(li) if val == 'a')对我来说,这似乎是非常明确和Pythonic式的:您正在寻找包含匹配值的最高索引。不需要nexts、lambdas、reverseds或itertools。
发布于 2014-04-18 09:39:57
许多其他的解决方案都需要遍历整个列表。这不是问题。
def find_last(lst, elm):
gen = (len(lst) - 1 - i for i, v in enumerate(reversed(lst)) if v == elm)
return next(gen, None)编辑:事后看来,这似乎是不必要的魔法。我会做一些类似这样的事情:
def find_last(lst, sought_elt):
for r_idx, elt in enumerate(reversed(lst)):
if elt == sought_elt:
return len(lst) - 1 - r_idx发布于 2011-07-31 23:02:03
>>> (x for x in reversed([y for y in enumerate(li)]) if x[1] == 'a').next()[0]
6
>>> len(li) - (x for x in (y for y in enumerate(li[::-1])) if x[1] == 'a').next()[0] - 1
6https://stackoverflow.com/questions/6890170
复制相似问题