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

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Da D to t v o é v ty t py IB111: Datové typy

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

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


Programování v Pythonu

Programování v Pythonu

6. blok část C Množinové operátory

prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. BI-ZMA ZS 2009/2010

2 Strukturované datové typy Pole Záznam Množina... 4

Množiny a operace s nimi

Kolekce, cyklus foreach

Množiny. množinové operace jsou mírně odlišné od

Programování v Pythonu

Prioritní fronta, halda

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Konvertor diakritiky 3. Instalace

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Algoritmizace a programování

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy



Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

Abstraktní datové typy


Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

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

IB111 Úvod do programování skrze Python Přednáška 7

Algoritmizace a programování

Základní datové struktury

Sada 1 - Základy programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Informační systémy ve zdravotnictví. 8. cvičení

Programování v jazyce JavaScript

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Informační systémy ve zdravotnictví. 6. cvičení

Programování v jazyce JavaScript

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

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

Funkce. Definiční obor a obor hodnot

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Programovací jazyk Pascal

Paradigmata programování 1

Algoritmizace prostorových úloh

0. ÚVOD - matematické symboly, značení,

3 Množiny, Relace a Funkce

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

2. přednáška - PRAVDĚPODOBNOST

24 Uživatelské výběry

Konstruktory a destruktory

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

8 Třídy, objekty, metody, předávání argumentů metod

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Datové struktury. alg12 1

NPRG030 Programování I, 2016/17 1 / :58:13

Databáze SQL SELECT. David Hoksza

Programovací í jazyk Haskell

1.3.4 Vennovy diagramy

Regulární výrazy. Filtry grep, sed a awk.

Programujeme v softwaru Statistica - příklady

Programování v C++ 1, 16. cvičení

Ekvivalence. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 5


Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Základy PERLu snadno a rychle

Požadavky na zápočet a zkoušku

Databáze I. Přednáška 2

Dynamické datové struktury IV.


Pravděpodobnost a její vlastnosti

Práce se soubory. Základy programování 2 Tomáš Kühr

SOFTWAROVÁ PODPORA TVORBY PROJEKTŮ

Analýza problémové domény

Datové struktury 1: Základní datové struktury

Abstraktní datové typy: zásobník

BI-EP1 Efektivní programování 1

Datové typy a struktury

NPRG030 Programování I, 2017/18 1 / :22:16

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Diskrétní matematika. DiM /01, zimní semestr 2017/2018

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Reálná čísla. Sjednocením množiny racionálních a iracionálních čísel vzniká množina

Modely vyhledávání informací 4 podle technologie. 1) Booleovský model. George Boole Aplikace booleovské logiky

Databázové systémy I

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) : Množiny 1 of 9 Python Množiny Úvod Množina je neuspořádaná kolekce jedinečných a neměnných (immutable) hodnot. K jejímu vytvoření slouží konstruktor set() nebo přímá notace za pomoci složených závorek: = { 1, 2, 'ahoj', 3, 'b', } {3, 1, 2, 'b', 'ahoj'} >>> type(xs) <class 'set'> Stejně tak je možné vytvořit množinu z jiných datových typů, např. seznamu (který obsahuje pouze neměnné datové typy): = [ 1, 2, 'ahoj', 3, 'b', ] >>> set(xs) {1, 2, 3, 'ahoj', 'b'} Množiny v Python'u jsou jinak množinami v matematickém smyslu slova, takže na nich můžeme provádět standardní množinové operace jako je sjednocení, průnik nebo rozdíl. Základní vlastnosti Ačkoli množiny nepatří mezi sekvence, některé z vlastností mají díky své struktuře balíků na hodnoty společné:

Python (2011-03-17) : Množiny 2 of 9 = { 1, 2, 'ahoj', 3, 'b', } # dotaz na počet prvků >>> len(xs) 5 # dotaz na výskyt prvku >>> 'b' in xs >>> 5 in xs False # přirozený cyklus přes prvky množiny >>> for x in xs:... print(x)... 1 2 3 ahoj b Přidávání prvků Přidat prvky do množiny se dá dvěma způsoby: I. Metoda add(prvek) přebírá jeden prvek (libovolného typu) a pokud ještě v množině není, přidá ho tam: = {1, 2.0, 'tři', } # přidání nového prvku.add('four') {'four', 1, 2.0, 'tři'} # pokus o přidání již existujícího prvku.add(1) {'four', 1, 2.0, 'tři'} II. Metoda update(ys[, ZS,...]) přebírá na vstupu jednu (nebo více) množin a postupně je prvek po prvku zanese do hlavní množiny:

Python (2011-03-17) : Množiny 3 of 9 = {'four', 1, 2.0, 'tři'} # přidání prvků z jedné množiny.update( {5, 'šest'} ) {'four', 1, 2.0, 'šest', 'tři', 5} # přidání prvků ze dvou množin.update( {'sedm', 8.0,}, {9,} ) {'four', 1, 2.0, 'šest', 'tři', 9, 8.0, 'sedm', 5} Kromě toho dokáže zpracovat na vstupu i typy, které je možno na množiny převést, a s jejich prvky provede stejnou operaci. Například pro seznam: = {1, 2.0, 'tři', }.update( ['four', 5, 1, 'tři',] ) {'four', 1, 2.0, 'tři', 5} Odebírání prvků Odebrat prvky z množiny je možné třemi rozdílnými způsoby: I. Metoda discard(prvek) se pokusí daný prvek odstranit z množiny. Pokud tam není, nic se nestane: = {1, 2.0, 'tři', } # odstranění prvku.discard(2.0) {1, 'tři'} # pokus o odstranění neexistujícího prvku.discard(2.0) {1, 'tři'} II. Metoda remove(prvek) dělá úplně to samé jako metoda discard(), ale zavoláte-li ji pro neexistující prvek, bude se na vás zlobit :

Python (2011-03-17) : Množiny 4 of 9 = {1, 2.0, 'tři', } # odstranění prvku.remove(2.0) {1, 'tři'} # pokus o odstranění neexistujícího prvku.remove(2.0) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 2.0 III. Metoda x = xs.pop() odstraňuje a zároveň vrací náhodný prvek z množiny. Pokus o odstranění prvku z prázdné množiny selže: = {'tři', 1, 2.0, } {1, 2.0, 'tři'} # postupné odstraňování (a vracení) náhodných prvků množiny.pop() 1.pop() 2.0 >>>.pop() 'tři' # pokus o odstranění (a vrácení) prvku z prázdné množiny.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'pop from an empty set' Množinové operace Množiny podporují tradiční sadu množinových operací. K dispozici jsou ve dvou podobách: I. Více bližší jazyku matematiky (a tak nejspíš průhlednější) jsou množinové operace pomocí binárních operátorů:

Python (2011-03-17) : Množiny 5 of 9 # zaveďme dvě množiny jako uskupení jedinečných písmen ze dvou řet = set('abracadabra') >>> ys = set('alabama') {'a', 'r', 'b', 'c', 'd'} >>> ys {'a', 'b', 'm', 'l'} # PRŮNIK: písmena, která jsou zároveň v xs i ys & ys {'a', 'b'} # SJEDNOCENÍ: písmena, která jsou v xs a v ys ys {'a', 'c', 'b', 'd', 'm', 'l', 'r'} # ROZDÍL: písmena z xs, která nejsou v ys - ys {'c', 'r', 'd'} # SYMETRICKÝ ROZDÍL: písmena, která jsou buď pouze v xs nebo pouze ^ ys {'c', 'd', 'm', 'l', 'r'} Máme také k dispozici standardní dotazy na množiny: = {'tři', 1, 2.0, } >>> ys = {'tři', } # Je/není (vlastní) podmnožinou? >>> ys <= xs >>> ys < xs >>> ys <= ys >>> ys < ys False # Je/není (vlastní) nadmnožinou? >= ys > ys # Je/není prvkem? >>> 2.0 in xs >>> 2.0 not in xs False

Python (2011-03-17) : Množiny 6 of 9 II. Druhou variantu představují metody objektů typu množina. Největším rozdílem oproti operátorovým verzím je, že jako své argumenty akceptují libovolné typy, ze kterých je možno vyrobit množiny. Následují příklady odpovídající výše uvedeným operátorovým verzím: = set('abracadabra') >>> ys = set('alabama') # PRŮNIK: písmena, která jsou zároveň v xs i ys [odpovídá operátor.intersection(ys) {'a', 'b'} # SJEDNOCENÍ: písmena, která jsou v xs a v ys [odpovídá operátoru.union(ys) {'a', 'c', 'b', 'd', 'm', 'l', 'r'} # ROZDÍL: písmena z xs, která nejsou v ys [odpovídá operátoru -].difference(ys) {'c', 'r', 'd'} # SYMETRICKÝ ROZDÍL: písmena, která jsou buď pouze v xs nebo pouze.symmetric_difference(ys) {'c', 'd', 'm', 'l', 'r'} = {'tři', 1, 2.0, } >>> ys = {'tři', } # Je ys podmnožina xs/ys? [odpovídá operátoru <=] >>> ys.issubset(xs) >>> ys.issubset(ys) # Je xs nadmnožina ys? [odpovídá operátoru >=].issuperset(ys) Navíc je k dispozici operace isdisjoint(), která nemá operátorovou variantu, a vrací, pokud množiny nemají žádné společné prvky: >>> {'tři', 1, 2.0, }.isdisjoint( {'tři', } ) False >>> {'tři', 1, 2.0, }.isdisjoint( {'four', 5, } )

Python (2011-03-17) : Množiny 7 of 9 Další operace I. Množinu můžeme smazat pomocí její metody clear():.clear() set() II. Jako jedna z mála datových struktur nabízí množina i vlastní metodu pro tvorbu mělké kopie: copy() III. Operace za metodou update() je v podstatě sjednocení více množin. Dá se tudíž zapsat oběma následujícími způsoby pomocí metody a pomocí operátorů: # sjednocení metodou = {'tři', 1, 2.0, }.update( {'four', 5, 1, 'tři'} ) {'four', 1, 2.0, 'tři', 5} # sjednocení operátorem = {'tři', 1, 2.0, } = {'four', 5, 1, 'tři'} {'four', 1, 2.0, 'tři', 5} Obdobné metody i operátorové zkratky máme k dispozici i pro další množinové operace průnik, rozdíl a symetrický rozdíl:

Python (2011-03-17) : Množiny 8 of 9 # A1) společný průnik množin; operátorově = {'tři', 1, 2.0, } &= {'four', 5, 'tři', 1} & {'tři'} {'tři'} # A2) společný průnik množin; metodou = {'tři', 1, 2.0, }.intersection_update( {'four', 5, 'tři', 1}, {'tři'} ) {'tři'} # B1) rozdíl množin; operátorově = {'tři', 1, 2.0, 'four', 5, 6.0, 'sedm', } -= {'four', 5} {2.0} {1, 6.0, 'sedm', 'tři'} # B2) rozdíl množin; metodou = {'tři', 1, 2.0, 'four', 5, 6.0, 'sedm', }.difference_update( {'four', 5}, {2.0} ) {1, 6.0, 'sedm', 'tři'} # C1) symetrický rozdíl množin; operátorově = {1, 'dva', 3.0, 'four', } ^= {1, 2.0, 'tři', 'four'} {2.0, 3.0, 'tři', 'dva'} # C2) symetrický rozdíl množin; metodou = {1, 'dva', 3.0, 'four', }.symmetric_difference_update( {1, 2.0, 'tři', 'four'} ) {2.0, 3.0, 'tři', 'dva'} Generátorová notace Python 3 rozšířil generátorovou notaci dostupnou dříve pouze u seznamů na další dva typy. A jedním z nich je právě množina. Obecný konstruktor vypadá velmi podobně jako u seznamu: { HODNOTA for I in SEKVENCE [if PODMÍNKA] } Jeden příklad přímo z dokumentace:

Python (2011-03-17) : Množiny 9 of 9 = {x for x in 'abracadabra' if x not in 'abc'} {'r', 'd'}