Jawaban:
some_list[-1]
adalah yang terpendek dan paling Pythonic.
Bahkan, Anda dapat melakukan lebih banyak dengan sintaks ini. The some_list[-n]
sintaks mendapat elemen n-to-lalu. Jadi some_list[-1]
dapatkan elemen terakhir, some_list[-2]
dapatkan yang kedua ke yang terakhir, dll, semuanya some_list[-len(some_list)]
, yang memberi Anda elemen pertama.
Anda juga dapat mengatur elemen daftar dengan cara ini. Contohnya:
>>> 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 mendapatkan item daftar menurut indeks akan meningkatkan IndexError
jika item yang diharapkan tidak ada. Ini berarti bahwa some_list[-1]
akan memunculkan pengecualian jika some_list
kosong, karena daftar kosong tidak dapat memiliki elemen terakhir.
Jika objek str()
atau Anda list()
mungkin menjadi kosong seperti itu: astr = ''
atau alist = []
, maka Anda mungkin ingin menggunakan alist[-1:]
alih-alih alist[-1]
untuk objek "kesamaan".
Arti penting dari 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 mengembalikan objek daftar kosong atau objek str kosong lebih "elemen terakhir" -seperti objek pengecualian.
if len(my_vector) == 0 or my_vector[-1] != update_val
adalah pola yang bisa diterapkan. tapi itu jelas bukan solusi global - alangkah baiknya memiliki bentuk sintaks di mana Tidak ada hasilnya
xs[-1] if xs else None
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.
Cara paling sederhana untuk menampilkan elemen terakhir dalam python adalah
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
ada banyak metode lain untuk mencapai tujuan seperti itu tetapi ini pendek dan manis untuk digunakan.
list[-1]
akan salah.
a[-1:][0]
sama sekali ? Dia juga menyediakan a[-1]
. Penjelasannya tolong?
Dengan Python, bagaimana Anda mendapatkan elemen terakhir dari daftar?
Untuk mendapatkan elemen terakhir,
lolos -1
ke notasi subskrip:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Indeks dan irisan dapat mengambil bilangan bulat negatif sebagai argumen.
Saya telah memodifikasi contoh dari dokumentasi untuk menunjukkan item dalam urutan masing-masing referensi indeks, 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'
Metode ini mungkin secara tidak perlu memunculkan daftar kedua untuk tujuan mendapatkan elemen terakhir, tetapi demi kelengkapan (dan karena mendukung setiap iterable - bukan hanya daftar):
>>> *head, last = a_list
>>> last
'three'
Nama variabel, head terikat ke daftar yang baru dibuat yang tidak perlu:
>>> head
['zero', 'one', 'two']
Jika Anda tidak ingin melakukan apa pun dengan daftar itu, ini akan menjadi lebih penting:
*_, last = a_list
Atau, sungguh, jika Anda tahu itu daftar (atau paling tidak menerima notasi subskrip):
last = a_list[-1]
Seorang komentator berkata:
Saya berharap Python memiliki fungsi untuk first () dan last () seperti Lisp tidak ... itu akan menghilangkan banyak fungsi lambda yang tidak perlu.
Ini akan sangat sederhana untuk didefinisikan:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Atau gunakan operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
Dalam kedua kasus:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Jika Anda melakukan sesuatu yang lebih rumit, Anda mungkin akan mendapatkan kinerja lebih tinggi untuk mendapatkan elemen terakhir dengan cara yang sedikit berbeda.
Jika Anda baru dalam pemrograman, Anda harus menghindari bagian ini, karena itu menggabungkan bagian algoritma yang semantik berbeda secara bersamaan. Jika Anda mengubah algoritme Anda di satu tempat, itu mungkin memiliki dampak yang tidak diinginkan pada baris kode lain.
Saya mencoba memberikan peringatan dan kondisi selengkap mungkin, tetapi saya mungkin melewatkan sesuatu. Tolong beri komentar jika Anda pikir saya akan meninggalkan peringatan.
Sepotong daftar mengembalikan daftar baru - jadi kita dapat mengiris dari -1 hingga akhir jika kita ingin elemen dalam daftar baru:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Sisi baiknya adalah tidak gagal jika daftar kosong:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
Sedangkan upaya untuk mengakses menurut indeks menimbulkan suatu IndexError
yang perlu ditangani:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Tetapi sekali lagi, mengiris untuk tujuan ini hanya boleh dilakukan jika Anda membutuhkan:
for
loopSebagai fitur Python, tidak ada pelingkupan batin dalam satu for
lingkaran.
Jika Anda sudah melakukan iterasi lengkap pada daftar, elemen terakhir masih akan dirujuk oleh nama variabel yang ditetapkan dalam loop:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
Ini bukan secara semantik hal terakhir dalam daftar. Ini adalah hal terakhir yang nama item
itu terikat.
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
Jadi ini seharusnya hanya digunakan untuk mendapatkan elemen terakhir jika Anda
Kami juga dapat mengubah daftar asli kami dengan menghapus dan mengembalikan elemen terakhir:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Tetapi sekarang daftar asli dimodifikasi.
( -1
sebenarnya adalah argumen default, jadi list.pop
dapat digunakan tanpa argumen indeks):
>>> a_list.pop()
'two'
Hanya lakukan ini jika
Ini adalah kasus penggunaan yang valid, tetapi tidak terlalu umum.
Saya tidak tahu mengapa Anda melakukannya, tetapi untuk kelengkapannya, karena reversed
mengembalikan iterator (yang mendukung protokol iterator), Anda dapat meneruskan hasilnya ke next
:
>>> next(reversed([1,2,3]))
3
Jadi itu seperti melakukan kebalikan dari ini:
>>> next(iter([1,2,3]))
1
Tapi saya tidak bisa memikirkan alasan yang baik untuk melakukan ini, kecuali Anda akan memerlukan sisa iterator terbalik 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
Untuk mencegah IndexError: list index out of range
, gunakan 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'
Metode lain:
some_list.reverse()
some_list[0]
lst[-1]
adalah pendekatan terbaik, tetapi dengan iterables umum, 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'
list[-1]
akan mengambil elemen terakhir dari daftar tanpa mengubah daftar.
list.pop()
akan mengambil elemen terakhir dari daftar, tetapi akan mengubah / mengubah daftar asli. Biasanya, mengubah daftar asli tidak disarankan.
Atau, jika, karena alasan tertentu, Anda mencari sesuatu yang kurang pythonic, Anda dapat menggunakan list[len(list)-1]
, dengan asumsi daftar tersebut tidak kosong.
Anda juga dapat menggunakan kode di bawah ini, jika Anda tidak ingin mendapatkan IndexError saat daftar kosong.
next(reversed(some_list), None)
Oke, tapi bagaimana dengan hampir di semua bahasa items[len(items) - 1]
? Ini adalah IMO cara termudah untuk mendapatkan elemen terakhir, karena tidak memerlukan pengetahuan pythonic apa pun .
some_list[-1]
pendekatan karena lebih logis, dan menunjukkan apa yang sebenarnya dilakukan lebih baik daripada some_list[-1]
menurut saya.
some_list.last
- itu akan menjadi baris kode yang indah