[python] programujte.com Kurz Python - Lekce 9. - sort (key=...)

regnarG regnarg na seznam.cz
Pátek Červenec 6 21:02:32 CEST 2007


Happy Day napsal(a):
> 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á.
>
> 1) Jaktože arg mestoSeznam neni definovan a přece to bez něj nejde =
> 3. řádek nemůžu prostě nahradit return [1]
> 2) 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.
>
> Koukal jsem na http://docs.python.org/lib/ a nenašel jsem nic co by to
> vysvětlovalo. Špatně jsem koukal?
> 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?
> ------------------------------------------------------------------------
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
Nevidím jediný důvod, proč by ten argument neměl být definován. Jinak by
se to neseřadilo. Ta syntaxe není složitá ani nelogická, je to funkce,
protože často je třeba dělat složitější věci, než jen vybrat jeden prvek
z n-tice. Tato funkce může položky pro účel řazení libovolně
transformovat. Systém je jednoduchý, logický a přehledný. V Pythonu není
nic jen tak.

-- 

                                                  regnarG
http://regnarg.kx.cz



Další informace o konferenci Python