3 回答
TA贡献1828条经验 获得超3个赞
如果您实际上仅使用示例中显示的单个字母,则将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):
for i in reversed(range(len(li))):
if li[i] == x:
return i
raise ValueError("{} is not in list".format(x))
一线版:
next(i for i in reversed(range(len(li))) if li[i] == 'a')
TA贡献1779条经验 获得超6个赞
像伊格纳西奥(Ignacio)一样的单线飞机会更简单/更清晰
max(loc for loc, val in enumerate(li) if val == 'a')
在我看来,这似乎很清楚且具有Python风格:您正在寻找包含匹配值的最高索引。不需要下一步,lambda,reverses或itertools。
添加回答
举报