1. ホーム
  2. python

[解決済み] Pythonのリストで最後に出現した項目を見つける方法

2023-02-12 16:18:02

質問

このようなリストがあるとします。

li = ["a", "b", "a", "c", "x", "d", "a", "6"]

ヘルプで調べた限りでは、文字列の最後の出現箇所を返す組み込み関数はないようです(たとえば 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):
    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')