Pythonda ro'yxatning oxirgi elementini qanday olish mumkin?
Ro'yxatning oxirgi elementini qanday olish mumkin?
Javoblar (18)
some_list[-1] eng qisqa va eng pitonik.
Aslida, siz ushbu sintaksis bilan ko'proq narsani qilishingiz mumkin. some_list[-n] sintaksisi n-oxirgi elementni oladi. Shunday qilib, some_list[-1] oxirgi elementni oladi, some_list[-2] oxirgi elementni oladi va hokazo, some_list[-len(some_list)] gacha, bu sizga birinchi elementni beradi.
Roʻyxat elementlarini ham shu tarzda oʻrnatishingiz mumkin. Masalan; misol uchun:
>>> 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]
Esda tutingki, roʻyxat bandini indeks boʻyicha olish IndexError darajasini oshiradi. element mavjud emas. Bu shuni anglatadiki, agar some_list bo'sh bo'lsa, some_list[-1] istisno keltiradi, chunki bo'sh ro'yxatda oxirgi element bo'lishi mumkin emas.
some_list.last kabi narsani sog'indim - bu chiroyli kod qatori bo'lar edi
- person Dmitry P.; 20.01.2020
Agar str() yoki list() ob'ektlaringiz bo'sh bo'lib qolishi mumkin bo'lsa: astr = '' yoki alist = [], "bir xillik" ob'ekti uchun alist[-1] o'rniga alist[-1:] dan foydalanishni xohlashingiz mumkin.
Buning ahamiyati:
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
Farqi shundaki, bo'sh ro'yxat ob'ektini yoki bo'sh str ob'ektini qaytarish istisno ob'ektiga qaraganda "oxirgi element" ga o'xshaydi.
if len(my_vector) == 0 or my_vector[-1] != update_val ishlaydigan naqshdir. lekin bu, albatta, global yechim emas - natijada hech biri bo'lmagan sintaksis shakliga ega bo'lish yaxshi bo'lar edi.
- person Mark Mullin; 05.03.2017
Siz ham qila olasiz:
last_elem = alist.pop()
Bu sizning ro'yxatingiz bilan nima qilishni xohlayotganingizga bog'liq, chunki pop() usuli oxirgi elementni o'chiradi.
Pythonda oxirgi elementni ko'rsatishning eng oddiy usuli
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
Bunday maqsadga erishish uchun ko'plab boshqa usullar mavjud, ammo ulardan foydalanish qisqa va yoqimli.
list[-1] xato qiladi.
- person anon01; 15.02.2018
Pythonda ro'yxatning oxirgi elementini qanday olish mumkin?
Faqat oxirgi elementni olish uchun,
- ro'yxatni o'zgartirmasdan, va
- ro'yxatning oxirgi elementi borligini bilsangiz (ya'ni, u bo'sh emas)
-1 ni obuna belgisiga o'tkazing:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Tushuntirish
Indekslar va bo'limlar argument sifatida manfiy butun sonlarni qabul qilishi mumkin.
Har bir indeks ketma-ketlikda qaysi elementni ko'rsatish uchun hujjatlardan misolni o'zgartirdim. havolalar, bu holda, "Python", -1 qatoridagi oxirgi elementga, 'n' belgisiga murojaat qiladi:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
Takrorlanuvchi ochish orqali topshiriq
Ushbu usul keraksiz ravishda ikkinchi ro'yxatni faqat oxirgi elementni olish uchun amalga oshirishi mumkin, ammo to'liqlik uchun (va har qanday iteratsiyani qo'llab-quvvatlaydi - shunchaki ro'yxatlar emas):
>>> *head, last = a_list
>>> last
'three'
O'zgaruvchining nomi, boshi keraksiz yangi yaratilgan ro'yxatga bog'langan:
>>> head
['zero', 'one', 'two']
Agar siz ushbu ro'yxat bilan hech narsa qilmoqchi bo'lsangiz, bu ko'proq mos keladi:
*_, last = a_list
Yoki, agar siz bu ro'yxat ekanligini bilsangiz (yoki hech bo'lmaganda pastki yozuvni qabul qilsangiz):
last = a_list[-1]
Funktsiyada
Bir sharhlovchi shunday dedi:
Pythonda Lisp singari first() va last() funksiyalari bo‘lishini istardim... u ko‘plab keraksiz lambda funksiyalaridan xalos bo‘lardi.
Bularni aniqlash juda oddiy bo'ladi:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Yoki operator.itemgetter dan foydalaning:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
Ikkala holatda ham:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Maxsus holatlar
Agar siz murakkabroq ish qilmoqchi bo'lsangiz, oxirgi elementni biroz boshqacha yo'llar bilan olish yanada samaraliroq bo'lishi mumkin.
Agar siz dasturlashda yangi bo'lsangiz, ushbu bo'limdan qochishingiz kerak, chunki u semantik jihatdan algoritmlarning turli qismlarini birlashtiradi. Agar siz algoritmingizni bir joyda o'zgartirsangiz, u boshqa kod qatoriga kutilmagan ta'sir ko'rsatishi mumkin.
Men imkon qadar to'liq ogohlantirish va shartlarni berishga harakat qilaman, lekin men nimanidir o'tkazib yuborgan bo'lishim mumkin. Agar men ogohlantirish qoldiryapman deb o'ylasangiz, iltimos, izoh qoldiring.
Kesish
Ro'yxatning bir bo'lagi yangi ro'yxatni qaytaradi - shuning uchun biz elementni yangi ro'yxatda xohlamoqchi bo'lsak -1 dan oxirigacha bo'laklashimiz mumkin:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Ro'yxat bo'sh bo'lsa, bu muvaffaqiyatsizlikka uchramaydi:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
Indeks bo'yicha kirishga urinish IndexError ni ko'taradi, bu bilan ishlash kerak bo'ladi:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Shunga qaramay, bu maqsadda kesish faqat sizga kerak bo'lganda amalga oshirilishi kerak:
- yangi ro'yxat yaratildi
- va oldingi ro'yxat bo'sh bo'lsa, yangi ro'yxat bo'sh bo'ladi.
for halqa
Python-ning o'ziga xos xususiyati sifatida for tsiklida ichki qamrov yo'q.
Agar siz allaqachon ro'yxat bo'yicha to'liq iteratsiyani amalga oshirayotgan bo'lsangiz, oxirgi element hali ham tsiklda tayinlangan o'zgaruvchi nomi bilan havola qilinadi:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
Bu semantik jihatdan ro'yxatdagi oxirgi narsa emas. Bu semantik jihatdan item nomi bog'langan oxirgi narsadir.
>>> 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'
Shunday qilib, bu faqat oxirgi elementni olish uchun ishlatilishi kerak
- allaqachon aylanishmoqda va
- sikl tugashini bilasiz (xatolar tufayli buzilmaydi yoki chiqmaydi), aks holda u tsikl tomonidan havola qilingan oxirgi elementga ishora qiladi.
Uni olish va olib tashlash
Biz, shuningdek, oxirgi elementni olib tashlash va qaytarish orqali asl ro'yxatimizni o'zgartirishimiz mumkin:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Ammo endi asl ro'yxat o'zgartirildi.
(-1 aslida standart argumentdir, shuning uchun list.pop indeks argumentisiz ishlatilishi mumkin):
>>> a_list.pop()
'two'
Buni faqat agar
- ro'yxatda elementlar borligini bilasiz yoki agar u bo'sh bo'lsa, istisno bilan ishlashga tayyormisiz va
- Siz oxirgi elementni ro'yxatdan olib tashlashni, uni stek kabi ko'rib chiqmoqchisiz.
Bu to'g'ri foydalanish holatlari, lekin juda keng tarqalgan emas.
Qolgan teskarisini keyinroq saqlash uchun:
Nega buni qilganingizni bilmayman, lekin toʻliqligi uchun reversediteratorni qaytarganligi uchun (iterator protokolini qoʻllab-quvvatlaydi) uning natijasini next ga oʻtkazishingiz mumkin:
>>> next(reversed([1,2,3]))
3
Shunday qilib, buning teskarisini qilish kabi:
>>> next(iter([1,2,3]))
1
Ammo buni qilish uchun yaxshi sabab topa olmayman, agar sizga keyinroq teskari iteratorning qolgan qismi kerak bo'lmasa, ehtimol u quyidagicha ko'rinadi:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
va hozir:
>>> use_later
[2, 1]
>>> last_element
3
IndexError: list index out of range oldini olish uchun ushbu sintaksisdan foydalaning:
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'
lst[-1] - eng yaxshi yondashuv, lekin umumiy takrorlashlar bilan more_itertools.last a>:
Kod
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'
Boshqa usul:
some_list.reverse()
some_list[0]
O(n) da ham xuddi shunday amalni bajarishingiz mumkin, garchi sizda O(1) da qilish imkoniyati mavjud boʻlsa ham.
- person say_my_name; 08.06.2021
list[-1] ro'yxatni o'zgartirmasdan ro'yxatning oxirgi elementini oladi. list.pop() roʻyxatning oxirgi elementini oladi, lekin u asl roʻyxatni oʻzgartiradi/oʻzgartiradi. Odatda, asl ro'yxatni o'zgartirish tavsiya etilmaydi.
Shu bilan bir qatorda, agar siz biron sababga ko'ra kamroq pythonic narsani qidirsangiz, ro'yxat bo'sh emas deb hisoblab, list[len(list)-1] dan foydalanishingiz mumkin.
Ro'yxat bo'sh bo'lganda IndexErrorni olishni istamasangiz, quyidagi koddan ham foydalanishingiz mumkin.
next(reversed(some_list), None)
Yaxshi, lekin deyarli barcha tillarda umumiy bo'lgan items[len(items) - 1] haqida nima deyish mumkin? Bu oxirgi elementni olishning eng oson usuli IMO, chunki u hech qanday pythonic bilimni talab qilmaydi.
some_list[-1] yondashuvidan ko'ra yaxshiroq, chunki u mantiqiyroq va u aslida nima qilayotganini mening fikrimcha some_list[-1] dan yaxshiroq ko'rsatadi.
- person Byron Filer; 05.11.2016
my_test = [] last_item = my_test[len(my_test) - 1] uchun nima bo'ladi. Bu boshqa javoblar kabi IndexError uchun ham istisno qiladi. Garchi men istisnolar to'g'ri va yaxshi deb hisoblayman, chunki men Python-da afzal ko'rgan try:...except:...else:...finally:... kodlash namunasi bilan nima qilishni bilaman.
- person Fr0zenFyr; 14.04.2018
Pitonik yo'l
Shunday qilib, bizda a = [1,2,3,4] ro'yxati borligini ko'rib chiqaylik, Python Listda bizga uning bir qismini yoki elementini berish uchun manipulyatsiya qilish mumkin, quyidagi buyruq yordamida oxirgi elementni osongina olish mumkin.
print(a[-1])
Mana sizning so'rovingiz uchun yechim.
a=["first","middle","last"] # A sample list
print(a[0]) #prints the first item in the list because the index of the list always starts from 0.
print(a[-1]) #prints the last item in the list.
print(a[-2]) #prints the last second item in the list.
Chiqish:
>>> first
>>> last
>>> middle
IndexError oldini olish uchun: ro'yxat indeksi diapazondan tashqarida, siz ushbu kod qismini ishlatishingiz mumkin.
list_values = [12, 112, 443]
def getLastElement(lst):
if len(lst) == 0:
return 0
else:
return lst[-1]
print(getLastElement(list_values))
len(lst) == 0 bo'lsa, siz intni kutayotganingizda satrni qaytaradi.
- person raulmd13; 29.03.2021
Siz shunchaki [-1] indeksini olishingiz va qo'yishingiz kerak bo'ladi. Masalan:
list=[0,1,2]
last_index=list[-1]
print(last_index)
Chiqish sifatida siz 2 ta olasiz.
Python-dagi ro'yxatdagi oxirgi elementga kirish:
1: salbiy indeksli oxirgi elementga kirish -1
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'
2. Pop() usuli yordamida oxirgi elementga kiring
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'
Biroq, pop usuli oxirgi elementni ro'yxatdan olib tashlaydi.
.pop halokatli (boshqa javoblar bilan aniqlanganidek). U nafaqat ro'yxatdagi oxirgi elementni oladi, balki uni ro'yxatdan ham olib tashlaydi
- person Wondercricket; 08.06.2021
Agar siz my_list[-1] ni qilsangiz, bu ro'yxatning oxirgi elementini qaytaradi. Salbiy ketma-ketlik indekslari massiv oxiridan boshlab pozitsiyalarni ifodalaydi. Salbiy indekslash oxiridan boshlanadi degan ma'noni anglatadi, -1 oxirgi elementni anglatadi, -2 ikkinchi-oxirgi bandni anglatadi va hokazo.
Bu haqda hech qanday javob topa olmadim. Shunday qilib, qo'shish.
some_list[~0] ni ham sinab ko'rishingiz mumkin.
Bu tilda belgisi