Mendapatkan elemen terakhir dari daftar

Di Python, bagaimana anda mendapatkan elemen terakhir dari list?

Larutan

some_list[-1] adalah yang terpendek dan paling Pythonic.

Bahkan, anda dapat melakukan lebih banyak lagi dengan sintaks ini. The some_list[-n] sintaks mendapat nth-untuk-elemen terakhir. Jadi some_list[-1] sampai elemen terakhir, some_list[-2] mendapat kedua dari terakhir, dll, semua jalan ke bawah untuk some_list[-len(some_list)], yang memberikan elemen pertama.

Anda juga dapat mengatur daftar unsur-unsur dalam cara ini. Misalnya:

>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]

Perhatikan bahwa untuk mendapatkan daftar item dengan indeks akan meningkatkan IndexError jika diharapkan item yang doesn't ada. Ini berarti bahwa some_list[-1] akan menaikkan pengecualian jika some_list kosong, karena daftar kosong dapat't memiliki elemen terakhir.

Komentar (0)

Jika anda str() atau daftar() benda-benda yang mungkin berakhir menjadi kosong seperti ini: astr = '' atau alist = [], maka anda mungkin ingin untuk menggunakan alist[-1:] bukan alist[-1] untuk objek "kesamaan".

Makna dari hal ini adalah:

alist = []
alist[-1]   # will generate an IndexError exception whereas 
alist[-1:]  # will return an empty list
astr = ''
astr[-1]    # will generate an IndexError exception whereas
astr[-1:]   # will return an empty str

Di mana perbedaan yang dibuat adalah bahwa kembali kosong daftar objek atau kosong str objek lebih "elemen terakhir" seperti itulah pengecualian objek.

Komentar (6)

Anda juga dapat melakukan:

alist.pop()

Itu tergantung pada apa yang ingin anda lakukan dengan daftar anda karena pop() metode ini akan menghapus elemen terakhir.

Komentar (0)

Cara paling sederhana untuk menampilkan elemen terakhir dalam python

>>> list[-1:] # returns indexed value
    [3]
>>> list[-1]  # returns value
    3

ada banyak metode lain untuk mencapai tujuan tersebut, tapi ini pendek dan manis untuk digunakan.

Komentar (3)

Di Python, bagaimana anda mendapatkan elemen terakhir dari list?

Untuk mendapatkan elemen terakhir,

  • tanpa memodifikasi daftar, dan
  • dengan asumsi anda tahu daftar telah sebuah elemen terakhir (yaitu nonempty)

lulus -1 untuk subskrip notasi:

>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'

Penjelasan

Indeks dan irisan dapat mengambil bilangan bulat negatif sebagai argumen.

Saya telah dimodifikasi contoh dari dokumentasi untuk menunjukkan item dalam urutan indeks masing-masing referensi, dalam hal ini, dalam string "Python", -1 referensi elemen terakhir, karakter, 'n':

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5 
  -6  -5  -4  -3  -2  -1

>>> p = 'Python'
>>> p[-1]
'n'

Tugas melalui iterable membongkar

Metode ini mungkin tidak perlu terwujud daftar kedua untuk tujuan hanya mendapatkan elemen terakhir, tapi demi kelengkapan (dan karena itu mendukung setiap iterable - tidak hanya daftar):

>>> *head, last = a_list
>>> last
'three'

Nama variabel, kepala terikat yang tidak perlu yang baru dibuat daftar:

>>> head
['zero', 'one', 'two']

Jika anda berniat untuk melakukan apa-apa dengan daftar itu, ini akan lebih apropos:

*_, last = a_list

Atau, benar-benar, jika anda tahu itu's daftar (atau setidaknya menerima subskrip notasi):

last = a_list[-1]

Di sebuah fungsi

Commenter berkata:

saya berharap Python memiliki fungsi untuk pertama() dan() seperti Cadel tidak... itu akan menyingkirkan banyak yang tidak perlu lambda fungsi.

Ini akan menjadi cukup sederhana untuk menentukan:

def last(a_list):
    return a_list[-1]

def first(a_list):
    return a_list[0]

Atau menggunakan operator.itemgetter:

>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)

Dalam kedua kasus:

>>> last(a_list)
'three'
>>> first(a_list)
'zero'

Kasus-kasus khusus

Jika anda're melakukan sesuatu yang lebih rumit, anda dapat menemukan lebih performant untuk mendapatkan elemen terakhir dalam cara yang sedikit berbeda.

Jika anda're baru untuk pemrograman, anda harus menghindari bagian ini, karena itu pasangan jika tidak semantik bagian-bagian yang berbeda dari algoritma bersama-sama. Jika anda mengubah algoritma anda di satu tempat, itu mungkin memiliki dampak yang tidak diinginkan di baris lain dari kode.

Saya mencoba untuk memberikan peringatan dan kondisi sebagai benar-benar seperti yang saya bisa, tapi saya mungkin telah melewatkan sesuatu. Silakan komentar jika anda pikir saya'm meninggalkan peringatan keluar.

Mengiris

Sepotong daftar kembali daftar baru - sehingga kita dapat mengiris dari -1 sampai akhir jika kita mau elemen dalam sebuah daftar baru:

>>> a_slice = a_list[-1:]
>>> a_slice
['three']

Ini telah terbalik dari tidak gagal jika list kosong:

>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
...     do_something(tail)

Sedangkan yang mencoba untuk mengakses dengan indeks menimbulkan sebuah IndexError yang perlu ditangani:

>>> empty_list[-1]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range

Tapi sekali lagi, mengiris untuk tujuan ini hanya boleh dilakukan jika anda perlu:

  • sebuah daftar baru dibuat
  • dan yang baru daftar menjadi kosong jika sebelum daftar itu kosong.

untuk loop

Sebagai fitur Python, tidak ada dalam pelingkupan dalam untuk loop.

Jika anda're pertunjukan lengkap iterasi daftar sudah, elemen terakhir masih akan direferensikan oleh nama variabel yang ditetapkan dalam loop:

>>> def do_something(arg): pass
>>> for item in a_list:
...     do_something(item)
...     
>>> item
'three'

Ini bukan semantik hal terakhir dalam daftar. Ini adalah semantik hal terakhir yang nama, item, itu pasti.

>>> def do_something(arg): raise Exception
>>> for item in a_list:
...     do_something(item)
...
Traceback (most recent call last):
  File "", line 2, in 
  File "", line 1, in do_something
Exception
>>> item
'zero'

Dengan demikian ini hanya boleh digunakan untuk mendapatkan unsur terakhir jika anda

  • sudah perulangan, dan
  • kau tahu loop akan selesai (tidak pecah atau keluar karena kesalahan), jika tidak maka akan menunjuk ke elemen terakhir yang dirujuk oleh loop.

Untuk mendapatkan dan mengeluarkannya

Kami juga dapat bermutasi kami jual asli dengan menghapus dan mengembalikan elemen terakhir:

>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']

Tapi sekarang daftar asli dimodifikasi.

(-1 sebenarnya adalah default argumen, jadi daftar.pop dapat digunakan tanpa indeks argumen):

>>> a_list.pop()
'two'

Hanya lakukan hal ini jika

  • anda tahu daftar memiliki unsur-unsur di dalamnya, atau yang dipersiapkan untuk menangani pengecualian jika kosong, dan
  • anda berniat untuk menghapus elemen terakhir dari list, memperlakukannya seperti stack.

Ini berlaku penggunaan-kasus, tetapi tidak sangat umum.

Hemat sisa terbalik untuk nanti:

Saya don't tahu mengapa anda'd lakukan, tapi untuk kelengkapan, sejak dibalik kembali iterator (yang mendukung iterator protocol) anda dapat lulus hasil untuk next:

>>> next(reversed([1,2,3]))
3

Jadi itu's seperti melakukan kebalikan dari ini:

>>> next(iter([1,2,3]))
1

Tapi aku bisa't memikirkan alasan yang baik untuk melakukan hal ini, kecuali anda'll perlu sisa reverse iterator nanti, yang mungkin akan terlihat lebih seperti ini:

reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)

use_later = list(reverse_iterator)

dan sekarang:

>>> use_later
[2, 1]
>>> last_element
3
Komentar (0)

lst[-1] adalah pendekatan yang terbaik, tapi dengan umum iterables, pertimbangkan more_itertools.last:

Kode

import more_itertools as mit

mit.last([0, 1, 2, 3])
# 3

mit.last(iter([1, 2, 3]))
# 3

mit.last([], "some default")
# 'some default'
Komentar (0)

Untuk mencegah IndexError: list index out of range, menggunakan sintaks ini:

mylist = [1, 2, 3, 4]

# With None as default value:
value = mylist and mylist[-1]

# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'

# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
Komentar (0)

Metode lain:

some_list.reverse() 
some_list[0]
Komentar (0)

Anda juga dapat menggunakan kode di bawah ini, jika anda tidak ingin mendapatkan IndexError ketika daftar kosong.

next(reversed(some_list), None)
Komentar (0)

daftar[-1] akan mengambil elemen terakhir dari daftar tanpa mengubah daftar. daftar.pop() akan mengambil elemen terakhir dari list, tapi itu akan bermutasi/perubahan daftar asli. Biasanya, bermutasi asli daftar ini tidak dianjurkan.

Atau, jika, untuk beberapa alasan, anda'kembali mencari sesuatu yang kurang pythonic, anda bisa menggunakan daftar[len(list)-1], dengan asumsi list tidak kosong.

Komentar (1)

Ok, tapi bagaimana dengan yang umum di hampir setiap bahasa dengan cara item[len(item) - 1]? Ini adalah IMO cara termudah untuk mendapatkan elemen terakhir, karena tidak memerlukan apa-apa pythonic pengetahuan.

Komentar (6)