Di Python, bagaimana anda mendapatkan elemen terakhir dari list?
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.
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.
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.
Di Python, bagaimana anda mendapatkan elemen terakhir dari list?
Untuk mendapatkan elemen terakhir,
lulus -1
untuk subskrip notasi:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
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'
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]
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'
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.
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 "<stdin>", line 1, in <module>
IndexError: list index out of range
Tapi sekali lagi, mengiris untuk tujuan ini hanya boleh dilakukan jika anda perlu:
untuk
loopSebagai 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 "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
Dengan demikian ini hanya boleh digunakan untuk mendapatkan unsur terakhir jika anda
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
Ini berlaku penggunaan-kasus, tetapi tidak sangat umum.
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
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'
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'
Metode lain:
some_list.reverse()
some_list[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.