ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λεξικά Χειµερινό Εξάµηνο 2014

Σχετικά έγγραφα
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Λεξικά Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λίστες και Πλειάδες Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Ακολουθίες: Λίστες και Πλειάδες Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 5. Λεξικά (Dictionaries)

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Εισαγωγή στον Προγ/μό Υπολογιστών

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αλφαριθμητικά Χειμερινό Εξάμηνο 2016

Βασικές Ασκήσεις από τα Εργαστήρια της Python. Πέμπτη Εργ. 3 17:15 και 19:15

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Βασικά Στοιχεία Python 3

Λίστες. Lista=[ red, green, blue ] Το πλήθος των στοιχείων μια λίστας δίνεται από τη συνάρτηση len(): Len(Lista)

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Εισαγωγή στην Python Χειµερινό Εξάµηνο 2014

Βασικά στοιχεία γλώσσας προγραμματισμού. Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

Θέματα Προγραμματισμού Η/Υ

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 4

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Εισαγωγή στην Python Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Σφάλματα, εξαιρέσεις, εκσφαλμάτωση Χειμερινό Εξάμηνο 2016

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Σφάλµατα, εξαιρέσεις, εκσφαλµάτωση Χειµερινό Εξάµηνο 2014

Θέματα Προγραμματισμού Η/Υ

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Έλεγχος Ροής Προγράμματος

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Έλεγχος Ροής Προγράµµατος Χειµερινό Εξάµηνο 2014

Εισαγωγή στον Προγ/μό Υπολογιστών

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

Γλώσσα προγραμματισμού python

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

o AND o IF o SUMPRODUCT

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Πρότυπα Γεγονότων. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

ακολουθία (sequence)

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

Πληροφορική ΙΙ Θεματική Ενότητα 3

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Γιώργος Μανής Επίκουρος Καθηγητής Τμήματος Μηχανικών Η/Υ και Πληροφορικής Mάρτιος 2015

Πληροφορική ΙΙ Θεματική Ενότητα 10

Θέματα Προγραμματισμού Η/Υ

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

Πληρουορική Γ Γσμμασίοσ

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Συναρτήσεις Χειμερινό Εξάμηνο 2016

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Γιώργος Μανής Επίκουρος Καθηγητής Τμήματος Μηχανικών Η/Υ και Πληροφορικής 29 Οκτωβρίου 2014

Γιώργος Μανής Επίκουρος Καθηγητής Τμήματος Μηχανικών Η/Υ και Πληροφορικής 3 Μαϊου 2015

Τεχνικός Εφαρμογών Πληροφορικής

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Επαναληπτικές Ασκήσεις Χειµερινό Εξάµηνο 2014

Σημειωματάριο Δευτέρας 13 Νοε. 2017

ΚΕΦΑΛΑΙΟ Web Services

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμικός Κατακερματισμός

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στην Ανάπτυξη Εφαρμογών Web με Χρήση της Python, του Apache και του mod_python

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Πίνακες (Μια παλιά άσκηση) Εισαγωγή. A n

HTTP API v1.6 SMSBOX.GR HTTP API v

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάκτηση Πληροφορίας

Πληροφορική 2. Αλγόριθμοι

Βασικά στοιχεία γλώσσας προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Διορθώσεις σελ

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

String Handling ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Βάσεις Δεδομένων (Databases)

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

SQL Data Manipulation Language

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

Γλωσσική Τεχνολογία. String Handling Regular Expressions

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Συναρτήσεις Χειµερινό Εξάµηνο 2014

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

Πληροφορική ΙΙ Θεματική Ενότητα 4

10. Πίνακες Κατακερματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΘΝΙΚΟ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Συναρτήσεις

Πληροφορική ΙΙ Θεματική Ενότητα 11

Transcript:

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό Λεξικά Χειµερινό Εξάµηνο 2014

Γιατί Λεξικά; Στις ακολουθίες (π.χ. λίστες, αλφαριθµητικά) µπορούµε να αναφερόµαστε σε ένα στοιχείο µε τον αριθµητικό δείκτη του (π.χ. database[1], s[4]) Κάποιες φορές βολεύει να αναφερόµαστε σε ένα στοιχείο ή να ψάχνουµε ένα στοιχείο µε το όνοµά του (π.χ. database['john']) Τα λεξικά µας δίνουν αυτή τη δυνατότητα Ανάλογο της χρήσης λεξικού στην καθηµερινή µας ζωή 2

Λεξικά Το λεξικό είναι µια συλλογή ζευγών Κάθε ζεύγος περιέχει ένα κλειδί και µια τιµή Χρησιµοποιούµε τα κλειδιά για να ψάξουµε ή να αναφερθούµε στις τιµές π.χ. κλειδί = όνοµα λέξης, τιµή = ορισµός λέξης π.χ. κλειδί = όνοµα, τιµή = τηλέφωνο χωρίζει κλειδί από τιµή >>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} >>> phonebook['beth'] '9102' δεν είµαστε υποχρεωµένοι να εισάγουµε τα κλειδιά σε λεξικογραφική σειρά 3

Μοναδικότητα κλειδιών Τα κλειδιά είναι µοναδικά σε ένα λεξικό δεν µπορεί δύο ζεύγη να έχουν τα ίδια κλειδιά Οι τιµές δεν χρειάζεται να είναι µοναδικές χρήση τελευταίου κλειδιού >>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Beth': '3258 } >>> phonebook {'Beth': '3258', 'Alice': '2341'} >>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '9102'} >>> phonebook {'Cecil': '9102', 'Beth': '9102', 'Alice': '2341'} 4

Μετατροπή από Λίστα Η συνάρτηση dict δηµιουργεί ένα λεξικό από µια λίστα πλειάδων κάθε πλειάδα είναι ένα ζεύγος-στοιχείο του λεξικού >>> items = [('name', 'Gumby'), ('age', 42)] >>> d = dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d['name'] 'Gumby' οι τιµές ενός λεξικού µπορεί να είναι οποιουδήποτε τύπου τα κλειδιά δεν µπορεί να είναι λίστες >>> d = {23:56, 'a':25, 'b':'c', (4,5):'d', 2:[4,5]} 5

Άλλη χρήση της dict() Η συνάρτηση dict µπορεί να πάρει ως είσοδο και µια σειρά από στοιχεία τύπου κλειδί=τιµή >>> d = dict(name='gumby', age=42) >>> d {'age': 42, 'name': 'Gumby'} για κλειδιά τύπου αλφαριθµητικού µόνο! 6

Βασικές λειτουργίες >>> d = dict(name='gumby', age=42) >>> len(d) 2 >>> d['age'] 42 >>> d['something'] Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> d['something'] KeyError: 'something' True, αν υπάρχει >>> 'something' in d εγγραφή στο d µε False κλειδί something >>> d['age']=43 >>> del d['age'] εισάγει νέα εγγραφή αν δεν υπάρχει το >>> d['something']='i don\'t know κλειδί, αλλιώς την αλλάζει 7

Ειδικά χαρακτηριστικά Τα κλειδιά πρέπει να είναι µη µεταβαλλόµενου τύπου (δεν µπορεί να είναι λίστες) Όταν ορίζουµε µια τιµή για ένα κλειδί, το ζευγάρι (κλειδί, τιµή) εισάγεται στο λεξικό αν δεν υπάρχει ήδη το κλειδί δεν γίνεται έτσι µε τις λίστες >>> lst = ['a','b','c'] >>> lst[3] = 'd' Traceback (most recent call last): File "<pyshell#37>", line 1, in <module> lst[3] = 'd' IndexError: list assignment index out of range 8

Ειδικά χαρακτηριστικά Η εύρεση (π.χ. τελεστής in) γίνεται µε βάση το κλειδί Η εύρεση σε µεγάλα λεξικά είναι γρηγορότερη από την εύρεση σε µεγάλες λίστες δεικτοδότηση (indexing) µέσω κατακερµατισµού (hashing) Στα λεξικά, τα στοιχεία κλειδιών-τιµών δεν έχουν κάποια συγκεκριµένη σειρά τα λεξικά είναι αταξινόµητα σύνολα, τα στοιχεία των λιστών/πλειάδων είναι σε συγκεκριµένη σειρά 9

Formatting µε χρήση λεξικού κλειδί λεξικό >>> phonebook {'Beth': '9102', 'Cecil': '3258', 'Alice': '2341'} >>> "Cecil's phone number is %(Cecil)s." % phonebook "Cecil's phone number is 3258." >>> "Cecil's phone number is %s." % phonebook['cecil'] "Cecil's phone number is 3258." 10

Η µέθοδος clear Καθαρίζει το λεξικό από τα περιεχόµενά του >>> d = {} >>> d['name'] = 'Gumby >>> d['age'] = 42 >>> d {'age': 42, 'name': 'Gumby'} >>> d.clear() >>> d {} 11

Γιατί όχι αρχικοποίηση; >>> x = {} >>> y = x >>> x['key']='value' >>> y {'key': 'value'} >>> x = {} >>> y {'key': 'value'} >>> x = {} >>> y = x >>> x['key']='value' >>> y {'key': 'value'} >>> x.clear() >>> y {} 12

Η µέθοδος copy Αντιγράφει το λεξικό σε ένα άλλο λεξικό ρηχή αντιγραφή: τα αντικείµενα δεν αντιγράφονται >>> x = {'username': 'admin', 'machines': ['zeus','gaia']} >>> y = x.copy() >>> y['username']='user1' λίστα >>> y['machines'].remove('gaia') (µεταβαλλόµενο αντικείµενο) >>> y {'username': 'user1', 'machines': ['zeus']} >>> x {'username': 'admin', 'machines': ['zeus']} 13

Η µέθοδος copy Αντιγράφει το λεξικό σε ένα άλλο λεξικό ρηχή αντιγραφή: τα αντικείµενα δεν αντιγράφονται x = {'username': 'admin', 'machines': ['zeus','gaia']} y = x.copy() y['username']='user1' x 'username' 'machines' 'admin' ['zeus','gaia'] y 'username' 'machines' 'user1' y['machines'].remove('gaia') αν αντικαταστήσουµε ένα µη µεταβαλλόµενο αντικείµενο το πρωτότυπο δε µεταβάλλεται αν αλλάξουµε ένα µεταβαλλόµενο, το πρωτότυπο αλλάζει 14

Η συνάρτηση deepcopy Αντιγράφει το λεξικό σε ένα άλλο λεξικό πλήρης αντιγραφή: τα αντικείµενα αντιγράφονται >>> from copy import deepcopy >>> d = {} >>> d['names'] = ['Alfred', 'Bertrand'] >>> c = d.copy() >>> dc = deepcopy(d) >>> d['names'].append('clive') >>> c {'names': ['Alfred', 'Bertrand', 'Clive']} >>> dc {'names': ['Alfred', 'Bertrand']} 15

Αρχικοποίηση µέσω fromkeys Αρχικοποίηση λεξικού µε κλειδιά µόνο >>> dict.fromkeys(['name', 'age']) {'age': None, 'name': None} «τίποτα» >>> dict.fromkeys(['name', 'age'], '(unknown)') {'age': '(unknown)', 'name': '(unknown)'} ειδική τιµή: σηµαίνει µια δική µας τιµή για όλα τα κλειδιά 16

Η µέθοδος get Ψάχνει και επιστρέφει µια τιµή µε βάση το κλειδί, ενώ επιστρέφει «None» αν το κλειδί δεν υπάρχει >>> d ={'John': '3456'} >>> d['paul'] Traceback (most recent call last): File "<pyshell#145>", line 1, in <module> d['paul'] KeyError: 'Paul >>> print(d.get('paul')) None >>> print(d.get('john')) 3456 ειδική τιµή: σηµαίνει «τίποτα» 17

Η µέθοδος get Ψάχνει και επιστρέφει µια τιµή µε βάση το κλειδί, ενώ επιστρέφει «None» αν το κλειδί δεν υπάρχει >>> d ={'John': '3456'} >>> print(d.get('paul','n/a')) N/A >>> d = dict.fromkeys(['name', 'age']) >>> print(d.get('name')) None >>> print(d.get('paul','n/a')) N/A >>> print(d.get('name','n/a')) None αντικαθιστά το None, σε περίπτωση που δεν υπαρχει το κλειδί Paul το Paul δεν υπάρχει το name υπάρχει! 18

Η µέθοδος has_key Επιστρέφει True αν το κλειδί που παίρνει για όρισµα υπάρχει στο λεξικό, αλλίως False >>> d = {} >>> d.has_key('name') False >>> d['name'] = 'Eric' >>> d.has_key('name') True 19

Η µέθοδοi items, keys και values items: Επιστρέφει όλα τα ζευγάρια του λεξικού σε µια λίστα (χωρίς κάποια συγκεκριµένη σειρά) keys: Επιστρέφει όλα τα κλειδιά του λεξικού σε µια λίστα (χωρίς κάποια συγκεκριµένη σειρά) values: Επιστρέφει όλες τις τιµές του λεξικού σε µια λίστα (χωρίς κάποια συγκεκριµένη σειρά) >>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0} >>> d.items() [('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')] >>> list(d.keys()) ['url', 'title', 'spam'] >>> list(d.values()) ['http://www.python.org', 'Python Web Site', 0] 20

Η µέθοδοι pop και popitem pop: Επιστρέφει την τιµή του κλειδιού που παίρνει σαν όρισµα, µετά σβήνει το αντίστοιχο ζευγάρι pop: Επιστρέφει οποιοδήποτε ζευγάρι και το σβήνει από το λεξικό >>> d = {'x': 1, 'y': 2, 'z': 2} >>> d.pop('y') 2 >>> d {'x': 1, 'z': 2} >>> d.popitem() ('x', 1) >>> d {'z': 2} 21

Η µέθοδος setdefault Παρόµοια µε την get. Αν δε βρει το κλειδί, το εισάγει στο λεξικό µε µια τιµή που δίνουµε εµείς >>> d ={'John': '3456'} >>> d.setdefault('paul', 'unknown') 'unknown' >>> d {'Paul': 'unknown', 'John': '3456'} >>> d.setdefault('john', 'unknown') '3456' >>> d {'Paul': 'unknown', 'John': '3456'} το κλειδί Paul δεν υπάρχει: εισάγεται το 'Paul : unknown στο λεξικό το κλειδί John υπάρχει: επιστρέφεται η τιµή του και το λεξικό δεν αλλάζει 22

Η µέθοδος update Εισάγει σε ένα λεξικό τα περιεχόµενα ενός άλλου. Τυχόν υπάρχουντα κλειδιά, ενηµερώνονται. >>> d ={'John': '3456', 'Paul': '9123'} >>> t ={'Paul': '1234', 'Sue': '2014'} >>> d.update(t) >>> d {'Sue': '2014', 'Paul': '1234', 'John': '3456'} η τιµή του Paul αντικαθίσταται 23