Programování v Pythonu



Podobné dokumenty
Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Třídění a vyhledávání Searching and sorting


Programování v Pythonu

Programování v Pythonu

Funkcionální programování. Kristýna Kaslová

Programování v Pythonu





Témata pro doktorandské studium


Programování v Pythonu

Programování v Pythonu


19 - Polynomiální metody


Programování v Pythonu

Programování v Pythonu

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Město Chrast Náměstí 1, Chrast u Chrudimě

Vizuální programovací jazyk


Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Po počátečních manželských neshodách u nich vznikl pěkný rodinný krb.

Matematický model malířského robota

Programování v Pythonu

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Software IS Řízení stavebních zakázek

IB111 Základy programování Radek Pelánek 1 / 61


Zvyšování kvality výuky v přírodních a technických oblastech CZ.1.07/1.128/ Nástrahy virtuální reality (pracovní list)

STŘEDNÍ ŠKOLA STAVEBNÍ JIHLAVA

Usnesení. konaného dne 15. prosince 2010 v sále TJ PARAMO, Josefa Poppera 18 ve Svítkově

Programování v Pythonu

Město PETŘVALD Gen. Svobody 511, Petřvald

Stručný návod na práci v modulu podatelna a výpravna


Aktuální situace v oblasti zadluženosti ve Zlínském kraji

Programování v Pythonu

1 III. FOUKÁ ZE STRNIŠŤ - LISTOPAD...


Logika I. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı BI-MLO, ZS 2011/12

Mobilní aplikace. Dokument nepopisuje administrační rozhraní (backend) ani napojení na příbuzné databáze.

Faremní systémy podle zadání PS LFA s účastí nevládních organizací


PROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY.

Jak dál a jak lépe? Budoucnost softwarových řešení digitalizace a dlouhodobého uložení v kontextu zkušeností z projektu NDK.


Studentská tvůrčí a odborná činnost STOČ 2015

Trh kapitálu a půdy. formování poptávky po kapitálu (kapitálových. formování nabídky úspor. příležitosti, investice a úspory Trh půdy

Sestava, tiskárna, příslušenství, kompatibilita se skenerem




Dodatečné informace č. 6-11

Domácí násilí zák.135/2006 Sb.,a oprávnění policisty


Práce s čísly. Klíčové pojmy: Základní matematické operace, zápis složitějších příkladů, mocniny, odmocniny, zkrácené operátory

Profesionální zaměstnanec JLV Systémové nástroje pro rozvoj zaměstnanců včetně nastavení v praxi. sarka.smolkova@jlv.cz

USB485 Převodník USB na RS-485. Katalogový list. únor Komunikační převodníky

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

M STO ZRU NAD SÁZAVOU Z Á V R E N Ý Ú E T

Program (19,30 21,15 hodin)

L E G E N D A : URBAPLAN. ZMĚNA č. 4 ÚP MĚSTA ČESKÁ LÍPA URBAPLAN s.r.o VV/0,15

OPERAČNÍ SYSTÉMY MS-DOS

materiál č. šablony/č. sady/č. materiálu: Autor: Karel Dvořák Vzdělávací oblast předmět: Informatika Ročník, cílová skupina: 8.

POSUDEK /001-i základové patky FVE

Databáze RÚIAN a možnosti jejího využití pro geografickou podporu AČR

Z Á P I S o průběhu 5. zasedání Zastupitelstva města Kunštát, konaného dne v hodin v zasedací síni MěÚ Kunštát Ad 1)


Komputerizace problémových domén

Zásady pro vypracování disertační práce Fakulty strojní VŠB-TUO

Programování v Pythonu

THT. vlhkoměr a teploměr. Měření vlhkosti 0 až 100 % Měření teploty 40 až +123,8 C Automatický výpočet rosného bodu Komunikace linkou RS485

GRAPHISOFT ARCHICAD 14

Mikromarz. CharGraph. Programovatelný výpočtový měřič fyzikálních veličin. Panel Version. Stručná charakteristika:

PRINCeGON metodika řízení projektů MV Příloha č. 2 Postup registrace projektu v systému egonis

NEBO 1b) v mailu jste dostali link (odkaz) na stažení nové verze programu, například

Zadání neveřejného výběrového řízení Příručky pro příjemce finanční podpory projektů Operačního programu Rozvoj lidských zdrojů v platném znění

STATUTÁRNÍ MĚSTO KLADNO VOLEBNÍ ŘÁD. pro volbu primátora města Kladna, náměstků primátora města Kladna a dalších členů Rady města Kladna

1. Česko-polská Hřebenovka záměr vlajkového projektu PhDr. Maierová

Vytěžování znalostí z dat

VÝZVA K PODÁNÍ NABÍDKY


UPLATŇOVÁNÍ A PODOBY PŘÍMÉ FINANČNÍ POMOCI FYZICKÝM OSOBÁM NA ÚROVNI OBCÍ

Zadávací dokumentace k veřejné zakázce

Modelování obchodních procesů


Opatření 1, 2 Dotačního programu města Strakonice na podporu kultury v roce 2016

Divadlo na Vinohradech

Směrnice č. 30. Stavební úpravy v bytech a nebytových prostorách. Účetní jednotka: Stavební bytové družstvo Letohrad, Požárníků 791, Letohrad

Záloha a obnovení Uživatelská příručka

Skautská stezka Cesta Země (1. stupeň)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Transkript:

ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního m sta Prahy. Praha & EU: Investujeme do va²í budoucnosti

Python (2011-03-17) : Třídění 1 of 4 Python Třídění Třídění sekvenčních typů Python má zabudovaný algoritmus pro třídění TimSort, který je poměrně univerzální, rychlý a hlavně stabilní, takže se dá použít pro vícenásobné třídění objektů podle více kritérií. Jeho aplikaci umožňují dvě metody: I. Metoda xs.sort([key[, reverse]]) řadí v místě objekty typu seznam: >>> xs = [5, 2, 6, 4, 1, 3, ] >>> xs.sort() >>> xs [1, 2, 3, 4, 5, 6] II. Globální funkce xs = sorted(iterable[, key][, reverse]) dokáže nějakým způsobem setřídit každý iterovatelný typ, který se nějak setřídit dá, přičemž vrací seznam: >>> xs = { 'b': 2, 'a': 1, 'c': 9, 'd': 7, } >>> ys = sorted(xs) >>> ys ['a', 'b', 'c', 'd'] Nepovinný boolean-parametr reverse nastavením na True způsobí změnu směru řazení (vlastně provádí všechna porovnávání opačně): >>> xs = [5, 2, 6, 4, 1, 3, ] >>> xs.sort( reverse=true ) >>> xs [6, 5, 4, 3, 2, 1] V dalším textu ho, a stejně tak i metodu seznamu sort(), budeme ignorovat a probereme důkladně pouze druhý pojmenovaný parametr key a logiku schovanou za vlastním tříděním.

Python (2011-03-17) : Třídění 2 of 4 Třídění je lexikografické Objekty v Python'u se třídí podle svého typu: # třídění čísel podle velikosti >>> sorted( [1, 5, 3, 2, 4, ] ) [1, 2, 3, 4, 5] # třídění řetězců podle abecedy.. >>> sorted( ['ovce', 'kočka', 'pes', 'hroznýš', 'prase', ] ) ['hroznýš', 'kočka', 'ovce', 'pes', 'prase'] #..ovšem unicodové >>> sorted( ['jedna', 'dvě', 'tři', 'čtyři', 'pět', 'šest', 'sedm' ['dvě', 'jedna', 'pět', 'sedm', 'tři', 'čtyři', 'šest'] Složitější objekty se pak třídí postupně po jednotlivých částech, přičemž každý základní/jednoduchý typ se třídí stejně jako výše: >>> sorted( [('two', 3), ('one', 4), ('one', 2), ('three', 5), ('two' [('one', 2), ('one', 4), ('three', 5), ('two', 1), ('two', 3)] Magický parametr key Třídění můžeme vnutit, aby se chovalo jinak, než by pro daný typ bylo běžné. To zajišťuje nepovinný pojmenovaný parametr key, který specifikuje funkci, která bude před vlastním porovnáváním zavolána na každý prvek vstupního iterovatelného typu. Několik příkladů: I. Využití předdefinované funkce: >>> sorted( names, key=len ) II. Využití lambda-funkce:

Python (2011-03-17) : Třídění 3 of 4 >>> sorted( [('two', 3), ('one', 4), ('one', 2), ('three', 5), ('two' Složitější použití lambda-funkce: # A) setřídění pouze podle délky slov >>> sorted(names, key=len) # B) setřídění navíc i podle abecedy >>> sorted(names, key=lambda x: (len(x), x)) ['Ix', 'Jane', 'John', 'Pete', 'David', 'Wendy', 'Amanda'] Modul operator Třídění podle vybrané části složitějšího objektu je natolik častý obrat, že Python poskytuje v rámci modulu operator několik pomocných funkcí, které nám ušetří psaní výběrových lambda-funkcí: >>> xs = [('two', 3), ('one', 4), ('one', 2), ('three', 5), ('two' # A) výchozí lexikografické třídění >>> sorted(xs) [('one', 2), ('one', 4), ('three', 5), ('two', 1), ('two', 3)] # B1) třídění za pomoci výběrové lambda-funkce >>> sorted(xs, key=lambda x: x[1]) # B2) totéž, ale za pomoci metody itemgetter() >>> from operator import itemgetter >>> sorted(xs, key=itemgetter(1))

Python (2011-03-17) : Třídění 4 of 4 Modul operator poskytuje i další metody, které se uplatní zvláště u třídění instancí objektů: operator.attrgetter(), operator.methodcaller() Třídění je stabilní Všimněme si ještě jednou příkladu: >>> sorted( names, key=len ) Jelikož porovnávací funkcí je len(), tedy délka řetězce, provede Python na vstupním objektu jen tolik změn, kolik je nezbytně nutné. Ve výsledku si čtyřpísmenná ('John', 'Pete', 'Jane') i pětipísmenná ('Wendy', 'David') slova zachovají stejné pořadí jako na vstupu. Stability se dá využít pro třídění podle více kritérií postupně provedeme třídění od posledního požadavku po první. Např. studenty podle známky a poté podle věku setřídíme následovně: # ('jméno', 'známka', věk) >>> xs = [ ('Petr', 'A', 23), ('Bořek', 'A', 21), ('Pavel', 'B', 21 # a) nejdříve provedeme třídění podle věku.. >>> s = sorted(xs, key=lambda x: x[2]) # b)..a poté podle známky >>> sorted(s, key=lambda x: x[1]) [('Bořek', 'A', 21), ('Petr', 'A', 23), ('Pavel', 'B', 21)] Poznámky Třídění můžeme vnutit ohled na národní zvyklosti pomocí metody key = locale.strxfrm() modulu locale. Ne že by to bylo zrovna jednoduché... Výchozí porovnávání objektů využívá jejich metodu lt (), je li k dispozici. Jejím definováním tudíž můžeme předepsat, jak se naše objekty budou mezi sebou porovnávat. Funkce vstupující do parametru key vůbec nemusí operovat na porovnávaných objektech. Má-li to smysl, může hodnoty pro třídění brát úplně odjinud.