Setara dengan rindex untuk daftar dengan Python [duplikat]

Apakah ada cara efisien untuk menemukan item terakhir yang cocok dalam daftar? Saat bekerja dengan string, Anda dapat menemukan item terakhir dengan rindex:

    >>> a="GEORGE"
    >>> a.rindex("G")
    4

...Tetapi metode ini tidak ada untuk daftar:

    >>> a=[ "hello", "hello", "Hi." ]
    >>> a.rindex("hello")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'list' object has no attribute 'rindex'

Apakah ada cara untuk mendapatkan ini tanpa harus membuat lingkaran besar? Saya lebih suka untuk tidak menggunakan metode sebaliknya jika hal itu dapat dihindari, karena urutannya penting dan saya juga harus melakukan sedikit perhitungan ekstra untuk mengetahui di mana objek / akan / berada. Tampaknya ini sia-sia.

Sunting:

Untuk memperjelas, saya memerlukan nomor indeks item ini.


person Kelketek    schedule 23.03.2012    source sumber
comment
stackoverflow.com/questions/6890170/   -  person Martin Flucka    schedule 23.03.2012
comment
Gunakan reversed(a), itu membuat iterator terbalik dan jangan mengubah daftar.   -  person Kien Truong    schedule 23.03.2012
comment
Dikei, bisakah anda memberi saya contoh sebagai jawabannya? Saya akan dengan senang hati memilihnya jika berhasil.   -  person Kelketek    schedule 23.03.2012
comment
reversed objek tidak memiliki metode index()   -  person kosii    schedule 23.03.2012


Jawaban (4)


Bagaimana tentang:

len(a) - a[-1::-1].index("hello") - 1

Edit (masukkan fungsi seperti yang disarankan):

def listRightIndex(alist, value):
    return len(alist) - alist[-1::-1].index(value) -1
person EwyynTomato    schedule 23.03.2012
comment
Ini bukanlah solusi yang baik. Ini berfungsi, tetapi membuat salinan seluruh daftar. Tidak masuk akal untuk kasus penggunaan. - person Guy; 10.10.2018

Ini seharusnya berhasil:

for index, item in enumerate(reversed(a)):
    if item == "hello":
        print len(a) - index - 1
        break
person Kien Truong    schedule 23.03.2012

Saya menulis fungsi Python langsung, dan ini dia:

def list_rindex(lst, item):
    """
    Find first place item occurs in list, but starting at end of list.
    Return index of item in list, or -1 if item not found in the list.
    """
    i_max = len(lst)
    i_limit = -i_max
    i = -1
    while i > i_limit:
        if lst[i] == item:
            return i_max + i
        i -= 1
    return -1

Namun saat saya mengujinya, EwyynTomato memposting jawaban yang lebih baik. Gunakan mesin "pengiris" untuk membalik daftar dan gunakan metode .index().

person steveha    schedule 23.03.2012

Mendukung start:

def rindex(lst, val, start=None):
    if start is None:
        start = len(lst)-1
    for i in xrange(start,-1,-1):
        if lst[i] == val:
            return i
person mpen    schedule 09.07.2012