Python - 9. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Python - 9. lekcePython - 9. lekce

 

Python - 9. lekce

Google       Google       2. 9. 2005       28 952×

Budeme pokračovat v našem "telefonním seznamu". Každého jistě napadlo, co všechno náš program by mohl umět. Mě osobně tam chybí možnost uložení do souboru, abych měl data přístupná i po skončení programu. Někdo by rád v seznamu vyhledával a vypisoval výsledky. Vylepšovat můžeme prakticky vše. Dneska se podíváme na možnosti seřazení seznamu podle abecedy.

Reklama
Reklama

Telefonní seznam 2.

Budeme pokračovat v našem "telefonním seznamu". Každého jistě napadlo, co všechno náš program by mohl umět. Mě osobně tam chybí možnost uložení do souboru, abych měl data přístupná i po skončení programu. Abych je nemusel znovu a znovu zadávat. Někdo by to rád viděl v okně, jako klasickou okenní aplikaci. Někdo by rád v seznamu vyhledával a vypisoval výsledky. Vylepšovat můžeme prakticky vše. Dneska se podíváme na možnosti seřazení seznamu podle abecedy.

Řazení

Přestavte si, že náš telefonní seznam chceme vytisknout dle abecedy. Seřadit obyčejný seznam podle abecedy nebo velikosti čísel není v Pythonu nic těžkého.

>>> mesta=['Praha','Brno','Ostrava','Zlin']
>>> pocetObyvatel=[1000000, 350000, 300000, 80000]
>>> print mesta.sort()    # takto se nevytiskne nic, presto, ze se seznam seradi
None

Dejte pozor - metoda sort() nic nevrací (lépe řečeno 'nic' vrací). Nic znamená často v programování 'None' a právě proto to print vytiskne. Řadí takzvaně 'na místě' ('in place'). Správné syntaktické použití metody sort() je

>>> mesta.sort()
>>> pocetObyvatel.sort()
>>> print mesta, pocetObyvatel
['Brno', 'Ostrava', 'Praha', 'Zlin'] [80000, 300000, 350000, 1000000]

Syntakticky správně, logicky však špatně :-(. Na druhý pohled je vidět nedostatek tohoto postupu. Přestože na začátku seznamy samy sobě odpovídaly, seřadily se nezávisle na sobě a teď již neplatí, že např. Brno má 80000 obyvatel. Co s tím?


Seznamy v seznamech

Seznamy mohou obsahovat téměř vše: čísla, řetězce, ale i další, vnořené seznamy. Vyzkoušejte:

>>> x = [2, 'neco']
>>> y = [1, x, 4]
>>> print y
[1, [2, 'neco'], 4]
>>> print y[1]
[2, 'neco']
>>> y.append([5,'cosi'])
>>> print y, len(y)
[1, [2, 'neco'], 4, [5, 'cosi']] 4
>>> print x, len(x)
[2, 'neco'] 2

Mít seznam v seznamu je v našem případě velmi výhodné. Jednak nemusíme udržovat několik seznamů (jako v minulé lekci). Budeme mít tedy jeden , který bude obsahovat ve vnitřních seznamech vše co chceme a navíc získáme jednoduché řešení, když chceme seznamy řadit.

Řazení prosté

Chceme-li seznam seřadit podle první položky vnořeného seznamu, uděláme to jednoduše:

>>> mesta=[['Ostrava', 300000], ['Praha', 1000000], ['Brno', 350000], ['Zlin', 80000]]
>>> mesta.sort()
>>> print mesta
[['Brno', 350000], ['Ostrava', 300000], ['Praha', 1000000], ['Zlin', 80000]] 

Jména a počty jsou takto nerozbitně spojeny a řadí se současně. Můžeme takto jednoduše do vnitřních seznamů přidat ještě cokoliv dalšího, např. region, počty škol,... a při řazení bude vše zůstávat ve správném spojení.

Řazení podle počtu obyvatel

Tato je úloha je poměrně složitější. K jejímu řešení existuje několik cest, od low-level, tedy ruční naprogramování, až po high-level, co nám za funkce všechno jazyk umožňuje. De facto potřebujeme řadit podle druhé položky (vlastně první, protože první je nultá). Na to má Python 2.4 argument "key" v metodě sort() a s pomocí dodatečné funkce to řeší takto:

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

Procházení seznamem v seznamu

Jako obvykle, Python nabízí jednoduché přesto mocné řešení:

for mestoSeznam in mesta:
    print mestoSeznam  # tisk celého vnitřního seznamu
    print mestoSeznam[0], mestoSeznam[1] #nebo přes jeho položky

Python však nabízí dokonce i jednu feature ;-), kterou mu mohou ostatní jazyky tiše závidět. Prosté procházení přímo přes položky vnitřního seznamu:

for mesto, pocet in mesta:
    print mesto, pocet

Tak to by pro dnešek stačilo. Příště budeme ukládat do souboru. Několika způsoby.


Úkol

Zadání

Upravte váš dosavadní program tak, aby při zadávání se data ukládala do seznamu v seznamu a na konci vytiskněte seznam seřazený podle abecedy. Dále vypište, kolik je ve vašem seznamu lidí.

Extra pro pokročilé

Vytiskněte seznam navíc "obrácený", to znamená, že bude seřazen podle abecedy, ale odzadu, od "z" do "a". Budete k tomu asi potřebovat na Internetu vyhledat další parametr funkce sort().

Tip

Mrkněte na nové logo i barvy pythonýrského portálu.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Pavel KosinaAutor programuje v Pythonu.
Web    

Nové články

Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý