To'plamlar ro'yxatidagi elementlar katakchasining maksimal qiymatini olish

Ushbu kod bor:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals ,key=itemgetter(1))[2]

Mening savolim: nima uchun u 6 o'rniga 5ni qaytaradi? Men oxirgi elementning maksimal qiymatiga muhtojman. Agar max (...) [1] ni olganimda, u holda max (...) [0] max (...) [2] ga javob beradi 5. Nima uchun bu?

3

5 javoblar

itemgetter (1) bilan bog'lash orqali siz Pythondan 1-elementning qiymatiga qarab maksimal katakchani olishni so'raysiz. (1,3,5) birinchi indeksdagi (masalan, 3) eng katta elementga ega. So'ngra, bu katakdan ikkinchi indeksga (ya'ni, 5) kirasiz.

Oxirgi elementning maksimal qiymatini olish uchun uni o'rniga foydalaning:

>>> max([c for a,b,c in vals])
6
2
qo'shib qo'ydi
Chindan ham, ishlamaydi. Ma'lumotlar katta bo'lmasa, ro'yxat kompyuteri ehtimol tezroq bo'ladi.
qo'shib qo'ydi muallif wim, manba
Jenerator o'rniga maksimalgacha ro'yxatni o'tkazayotganingizning sababi bormi?
qo'shib qo'ydi muallif MooingRawr, manba

key=itemgetter(1) means that max checks the second element of the tuple to determine which tuple is the "max" tuple.

So it picks the first tuple since 3 is higher than 2, then you pick the last value and you get 5

If you want 6, I guess you could do max(vals ,key=itemgetter(2))[2]

Lekin siz indeks 2 qiymatini ham qo'lga kiritishingiz mumkin va shunday qilishingiz mumkin:

max(map(itemgetter(2),vals))

chunki siz boshqa qiymatlarni tashlayapsiz

1
qo'shib qo'ydi

x[2] is the 3 element of tuple on which max should be calculated and [2] is the third element of max tuple calculated

max(vals ,key=lambda x:x[2])[2]

yoki

max(vals ,key=itemgetter(2))[2] # you were using itemgetter(1) which would be second element of the tuple
0
qo'shib qo'ydi

Agar siz oxirgi elementni xohlasangiz, kodingizda -1 indeksidan foydalaning. Sizning kodingizda max va 2 taqqoslash uchun har bir nusxadagi ikkinchi elementni tanlaydi 1 keraksiz, uzunligi uchta.

>>> vals = [(1,3,5),(2,2,5),(1,2,6)]
>>> max(vals, key=itemgetter(-1))[-1]
>>> 6
0
qo'shib qo'ydi

Agar indeksidan foydalansam ni bajaraman:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals[2])
#> 6
0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming