Kurz Python - Lekce 9. - sort (key=...) – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kurz Python - Lekce 9. - sort (key=...) – Python – Fórum – Programujte.comKurz Python - Lekce 9. - sort (key=...) – Python – Fórum – Programujte.com

 

Vlastimil Ovčáčík
~ Anonymní uživatel
6 příspěvků
5. 7. 2007   #1
-
0
-

Dobrý den,
v kurzu Python od geona - Lekce 9. jsem se zarazil u úlohy:
# Jinak fakt skvělý kurz, moc mě to baví :)

def porovnej(mestoSeznam):

# definice funkce, která bude spolupracovat se sort()
return mestoSeznam[1] # zde vracíme tu položku, podle které chceme řadit

mesta=[['Praha', 1000000], ['Brno', 350000], ['Ostrava', 300000], ['Zlin', 80000]]
mesta.sort(key=porovnej) # serad podle klice (= funkce) "porovnej"
print "Serazeno podle poctu obyvatel: ", mesta

V předposlednim řádku se pomoci metody sort() seřazuje seznam mesta podle argumentu key=porovnej - dělá co má.

Nechápu:
1) Jaktože můžeme volat funkci porovnej bez "()". No ale budiž, tak asi argument mestoSeznam ve funkci porovnej nebude důležitý,ouha...
2) Jaktože arg mestoSeznam neni definovan a přece to bez něj nejde = 3. řádek nemůžu prostě nahradit return [1]
3) Proč najednou taková komplikace, doted se mi zdál Python jako jednoduchý, "intuitivní" jazyk :(
Mnohem elegantnější mi přijde: mesta.sort(key=[1]) :) ach jo.

Snad někdo zná odpověd :) Děkuju za všechny reakce.

P.S.: Nevíte někdo jak bych se mohl "podívat do útrob" metody sort() a vidět co tenhle kód dělá s argumentem key?

Nahlásit jako SPAM
IP: ...–
Dominik0
Super člen
5. 7. 2007   #2
-
0
-

To Vlastimil Ovčáčík: Presně na tohle sem se ptal už v diskuzi pod článkem ale zatim žídná odpověď ! Taky mi to neleze do hlavy !!!
Jo a s těma "útrobama" - to pochybuju ! tohle si většinou ty lidi co to vytvořili vhrání , ale třeba je v tomhle Python odlišnej ! Což by mne velice příjemě překvapilo !

Nahlásit jako SPAM
IP: ...–
Vlastimil Ovčáčík
~ Anonymní uživatel
6 příspěvků
6. 7. 2007   #3
-
0
-

To don_Dominique:
Asi tě dominiku potěším:

# -*- coding: utf-8 -*-

def porovnej(mestoSeznam):
# definice funkce, která bude spolupracovat se sort()
print mestoSeznam,u"=posláno argumentem key"
print mestoSeznam[1], u"tohle vrací fce porovnej - tohle si vyžádala metoda sort()\n"
return mestoSeznam[1] # zde vracíme tu položku, podle které chceme řadit

mesta=[['Praha', 1000000], ['Brno', 350000], ['Ostrava', 300000], ['Zlin', 80000]]
mesta.sort(key=porovnej) # serad podle klice (= funkce) "porovnej"
print "Serazeno podle poctu obyvatel: ", mesta

Už vím jak to je. Ten kód si pusť, třeba to taky uvidíš...(nezapomen na utf-8, ať to jde přečíst)

1) Metoda sort() s arg key=porovnej vezme to "porovnej" a dodá k němu závorky s adresou prvního prvku v seznamu - porovnej(mesta[0])
Později to bude opakovat, ale bude spouštět porovnej (mesta[1])
2) Fce porovnej(mesta[0]), kde -> mestoSeznam = mesta[0] <- což má hodnotu ['Praha',1000000], a tedy:
-> mestoSeznam[1] = mesto[0][1] <- což má hodnotu [1000000] - která je vrácena do metody sort()
3)Metoda sort() obdrží [1000000] a tuto zcela konkrétní informaci nejspíš (určitě) použije k přestavbě seznamu mesta[].
Dovedu si představit, že využije něčeho jako mesta.find([1000000]) a následně celý podseznam přesune na určitou pozici.
Takhle to zopakuje pro každý podseznam v seznamu mesta[].

Mě to takhle stačí, už mě nebolí hlava z toho, že si to nedovedu představit :-)
Řešení jsem si nakonec musel "vyprintovat" :)

Jinak furt nevím jak je to s těma "útrobama" - to je u mne furt aktuální...

Nahlásit jako SPAM
IP: ...–
Dominik0
Super člen
7. 7. 2007   #4
-
0
-

To Vlastimil Ovčáčík: Díky moc ! Ty útroby by mne taky zajímaly ! Ale přijde mi zajímavé že tenhle topic je tady už docela dlouho a pořád na něj nikdo neodpověděl ! to se tady tak často nestává ! ( pokud nepočítám topic: Máte přítelkyni ) :)

Nahlásit jako SPAM
IP: ...–
Vlastimil Ovčáčík
~ Anonymní uživatel
6 příspěvků
7. 7. 2007   #5
-
0
-

To don_Dominique:JJ, přijde mi to tu taky nějaký mrtvý :)
proto jsem se zaregistroval do e-mail fóra na http://www.py.cz/KonferenceDiskuze
kde už jsem zaznamenal nějaké reakce...

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý