3 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
如果您實際上僅使用示例中顯示的單個字母,則將str.rindex很方便。ValueError如果沒有這樣的項目,則會引發(fā)一個與list.index將引發(fā)的錯誤類別相同的錯誤類。演示:
>>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
>>> ''.join(li).rindex('a')
6
對于更一般的情況,您可以list.index在反向列表中使用:
>>> len(li) - 1 - li[::-1].index('a')
6
這里的切片將創(chuàng)建整個列表的副本。短列表很好,但是對于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條經(jīng)驗 獲得超6個贊
像伊格納西奧(Ignacio)一樣的單線飛機會更簡單/更清晰
max(loc for loc, val in enumerate(li) if val == 'a')
在我看來,這似乎很清楚且具有Python風格:您正在尋找包含匹配值的最高索引。不需要下一步,lambda,reverses或itertools。
添加回答
舉報