Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΜΥΥ105: Εισαγωγή στον Προγραμματισμό"— Μεταγράφημα παρουσίασης:

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

2 Δομές δεδομένων Μια δομή δεδομένων είναι μια δομημένη (οργανωμένη) συλλογή στοιχείων (π.χ., ψηφίων, χαρακτήρων, αριθμών, αλφαριθμητικών, κλπ.). Η πιο βασική δομή στην Python είναι η ακολουθία. Κύριοι τύποι ακολουθιών: Λίστα (list) Πλειάδα (tuple) Αλφαριθμητικό (string) Βασική διαφορά μεταξύ λιστών και άλλων ακολουθιών είναι ότι οι λίστες μπορούν να μεταβληθούν

3 Χρήση ακολουθιών Η χρήση ακολουθιών στην Python είναι εκτενής
Ορίζουμε και χρησιμοποιούμε ακολουθίες όταν θέλουμε να διαχειριστούμε συλλογές δεδομένων

4 Λίστες Μια λίστα ορίζεται σαν ακολουθία στοιχείων, χωρισμένα από κόμματα, εντός ενός [ και ενός ] Μια λίστα μπορεί να περιέχει στοιχεία διαφορετικών τύπων >>>digits=[0,1,2,3,4,5,6,7,8,9] >>>letters = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’] >>>hex = [0,1,2,3,4,5,6,7,8,9, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’] >>>lanisters = [“Tywin”, “Tyrion”, “Cercei”, “Jamie”]

5 Προσπέλαση στοιχείων Τα στοιχεία μιας λίστας μπορούν να προσπελαστούν κατ’ αντιστοιχία με την προσπέλαση χαρακτήρων σε ένα αλφαριθμητικό Το πρώτο στοιχείο στη θέση 0, το 2ο στη θέση 1, κλπ. Επίσης: αρνητική δεικτοδότηση >>> digits[0] >>> hex[-1] ‘F’

6 Άλλες λειτουργίες σε λίστες
μήκος λίστας = αριθμός στοιχείων στη λίστα >>> len(digits) 10 συνένωση λιστών >>> digits + [10,11,12,13,14,15] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] συνένωση λιστών με διαφορετικά στοιχεία >>> digits + letters [0,1,2,3,4,5,6,7,8,9, ‘A’,’B’,’C’,’D’,’E’,’F’] επαλήθευση μέλους λίστας >>> 'A' in letters True

7 Άλλες λειτουργίες σε λίστες
>>> 3*['A','B','C'] ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'] >>> lst = [23.99, 19.99, 34.50, ] >>> min(lst) 19.99 >>> max(lst) 120.99 >>> sum(lst)

8 Άσκηση Δίνεται μια λίστα με λέξεις. Βρες τη μικρότερη και τη μεγαλύτερη λέξη (σε λεξικογραφική σειρά) >>> words = ['bat', 'ball', 'barn', 'basket', 'badmington'] >>> min(words) 'badmington' >>> max(words) 'bat'

9 Λίστες από λίστες Μια λίστα μπορεί να περιέχει σαν στοιχεία άλλες λίστες Π.χ. χρήση λιστών για τη δημιουργία μιας βάσης δεδομένων με ονόματα και ηλικίες προσώπων: >>>edward=['Edward Gumby', 42] >>>john=['John Smith', 50] >>>database=[edward, john] >>>database [['Edward Gumby', 42], ['John Smith', 50]] λίστα από λίστες

10 Άλλες λειτουργίες σε λίστες
μήκος λίστας = αριθμός στοιχείων στη λίστα = αριθμός από λίστες >>> len(database) 2 συνένωση λιστών με διαφορετικά στοιχεία >>> john + database ['John Smith', 50, ['Edward Gumby', 42], ['John Smith', 50]] επαλήθευση μέλους λίστας >>> 'John Smith' in john True >>> 'John Smith' in database False γιατί;; τα μέλη της database είναι ['Edward Gumby', 42] και ['John Smith', 50]

11 Άσκηση Δημιουργήστε τον μοναδιαίο 3x3 πίνακα
Πως θα διαβάσουμε το στοιχείο στην πρώτη γραμμή και δεύτερη στήλη? >>> I = [[1,0,0],[0,1,0],[0,0,1]] >>> I [[1, 0, 0], [0, 1, 0], [0, 0, 1]] >>> I[0][1] Μας δίνει την λίστα στην πρώτη γραμμή Μας δίνει το δεύτερο στοιχείο της λίστας

12 Κατάτμηση λιστών Κατάτμηση (slicing): Ένα τμήμα μιας λίστας ορίζεται με ένα διάστημα θέσεων [x:y] σε αυτή Το x είναι η θέση του πρώτου στοιχείου και το y η επομένη της θέσης του τελευταίου που θέλουμε >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] >>> letters[3:6] ['d', 'e', 'f'] >>> letters[-3:-1] ['h', 'i'] >>> letters[3:-3] ['d', 'e', 'f', 'g'] >>> letters[-3:0] [] μη έγκυρο διάστημα

13 Κατάτμηση λιστών To διάστημα θέσεων [x:y] μπορεί να έχει ένα ή και κανένα όριο Αν δεν προσδιορίσουμε το πάνω όριο, τότε εννοείται ότι θέλουμε μεχρι το τελευταίο στοιχείο, αν δεν προσδιορίσουμε το κάτω όριο θέλουμε μέχρι το πρώτο, αν κανένα τα θέλουμε όλα >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] >>> letters[-3:] ['h', 'i', 'j'] >>> letters[:5] ['a', 'b', 'c', 'd', 'e'] >>> letters[:] ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

14 Άσκηση Δίνεται μια διαδικτυακή διεύθυνση (URL) του τύπου Ζητείται να υπολογίσουμε το domain (something) # Split up a URL of the form url = input('Please enter the URL: ') postfix = url[11:] domain = postfix[:-4] print("Domain name: ", domain) Please enter the URL: Domain name: python

15 Βήμα Στo διάστημα θέσεων [x:y] μπορούμε να ορίσουμε έναν τρίτο αριθμό (βήμα) ορίζει για καθε πόσα στοιχεία θα παίρνουμε ένα >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] >>> letters[0:7:2] ['a', 'c', 'e', 'g'] >>> letters[1::2] ['b', 'd', 'f', 'h', 'j'] >>> letters[::3] ['a', 'd', 'g', 'j'] >>> letters[8:4:-2] ['i', 'g'] αρνητικό βήμα

16 Δημιουργία λίστας από αλφαριθμητικό
Η συνάρτηση list() προσφέρει έναν γρήγορο τρόπο δημιουργίας λίστας χαρακτήρων >>> list('Hello') ['H', 'e', 'l', 'l', 'o'] >>> x=list('Hello') >>> x

17 Αλλαγή στοιχείων λίστας
Μπορούμε να προσπελάσουμε και να αλλάξουμε ένα στοιχείο λίστας με την χρήση δείκτη Μπορούμε να σβήσουμε ένα στοιχείο λίστας >>> x=list('Hello') >>> x ['H', 'e', 'l', 'l', 'o'] >>> x[3]='p' ['H', 'e', 'l', 'p', 'o'] >>> del x[4] ['H', 'e', 'l', 'p']

18 Αλλά... >>> x= 'Hello’ >>> x 'Hello' >>> x[3] = 'p' Traceback (most recent call last): File "<pyshell#72>", line 1, in <module> x[3] = 'p' TypeError: 'str' object does not support item assignment Στα αλφαριθμητικά (όπως και στις πλειάδες) δεν μπορούμε να κάνουμε αλλαγές! Είναι αμετάβλητα αντικείμενα!

19 Αλλαγή τμημάτων λίστας
Μπορούμε να αλλάξουμε ολόκληρα τμήματα λιστών με χρήση slicing >>> name = list('Perl') >>> name ['P', 'e', 'r', 'l'] >>> name[2:] = list('ar') ['P', 'e', 'a', 'r'] >>> name[1:] = list('ython') ['P', 'y', 't', 'h', 'o', 'n'] αλλαγή στοιχείων και επέκταση της λίστας ταυτόχρονα

20 Αλλαγή τμημάτων λίστας
Μπορούμε να αλλάξουμε ολόκληρα τμήματα λιστών με χρήση slicing εισαγωγή στοιχείων χωρίς να διαγράψουμε τα υπάρχοντα >>> numbers = [1, 5] >>> numbers[1:1] = [2, 3, 4] >>> numbers [1, 2, 3, 4, 5] >>> numbers[1:4] = [] [1, 5] διαγραφή στοιχείων μέσα στο διάστημα θέσεων

21 Μέθοδοι λίστών (append)
Μέθοδος: συνάρτηση που καλείται μέσα από ένα αντικείμενο >>> x = list('Hello') >>> x ['H', 'e', 'l', 'l', 'o'] >>> x.append('p') ['H', 'e', 'l', 'l', 'o', 'p'] >>> x.append('pow') ['H', 'e', 'l', 'l', 'o', 'p', 'pow'] η λίστα είναι αντικείμενο η append είναι μέθοδος λιστών H append προσθέτει πάντα στο τέλος στης λίστας μπορούμε να προσθέσουμε οποιουδήποτε τύπου στοιχεία σε μια λίστα

22 Μέθοδοι λίστών (insert)
>>> x = list('Hello') >>> x ['H', 'e', 'l', 'l', 'o'] >>> x.insert(0, 'P') ['P', 'H', 'e', 'l', 'l', 'o'] >>> x.insert(len(x),'p') ['P', 'H', 'e', 'l', 'l', 'o', 'p'] το νεο στοιχείο μπαίνει ακριβώς πρίν από τη θέση εισαγωγής που καθορίζουμε ισοδύναμο με το x.append('p') το x.insert(i, elem) ισοδυναμεί με το x[i:i] = elem

23 Μέθοδοι λίστών (count)
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]] >>> x.count(1) 2 >>> x.count([1,2]) 1 >>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')

24 Μέθοδοι λίστών (extend)
To a.extend(b) είναι ισοδύναμο με το a[len(a):]=b >>> a = [1, 2, 3] >>> b = a >>> a.extend(b) >>> a [1, 2, 3, 1, 2, 3]

25 Μέθοδοι λίστών (pop) Η μέθοδος pop επιστρέφει ένα στοιχείο της λίστας και ταυτόχρονα το διαγράφει από αυτή αν δεν προσδιορίσουμε τη θέση του στοιχείου η pop θεωρεί ότι θέλουμε το τελευταίο στοιχείο από τη λίστα >>> x = [1, 2, 3] >>> x.pop() 3 >>> x [1, 2] >>> x.pop(0) 1 [2]

26 Μέθοδοι λίστών (index)
>>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni'] >>> knights.index('who') 4 >>> knights.index('herring') Traceback (most recent call last): File "<pyshell#123>", line 1, in <module> knights.index('herring') ValueError: 'herring' is not in list

27 Μέθοδοι λίστών (reverse)
>>> x=[1,2,3] >>> x.reverse() >>> x [3, 2, 1] >>> y=list(reversed(x)) >>> y [1, 2, 3] reversed(x): επιστρέφει τα στοιχεία της λίστας x σε αντίστροφη σειρά χωρίς να αντιστρέφει την ίδια τη λίστα x

28 Μέθοδοι λίστών (sort) Η μέθοδος sort ταξινομεί τη λίστα, βάζοντας τα στοιχεία της σε αυξουσα σειρα >>> x = [4, 6, 2, 1, 7, 9] >>> x.sort() >>> x [1, 2, 4, 6, 7, 9] >>> sorted(x) [4, 6, 2, 1, 7, 9] sorted(x): επιστρέφει τα στοιχεία της λίστας x ταξινομημένα χωρίς να ταξινομεί την ίδια τη λίστα x

29 Μέθοδοι λίστών (sort) Άσκηση: Θέλουμε να αρχικοποιήσουμε μια νέα λίστα με τα περιεχόμενα της x ταξινομημένα, χωρίς να πειράξουμε τη x >>> x = [4, 6, 2, 1, 7, 9] >>> y=x >>> y.sort() >>> y [1, 2, 4, 6, 7, 9] >>> x λάθος τρόπος: το πρόβλημα είναι ότι το y αναφέρεται στην ίδια λίστα με το x (το y δεν είναι αντιγραφή του x)

30 Μέθοδοι λίστών (sort) Άσκηση: Θέλουμε να αρχικοποιήσουμε μια νέα λίστα με τα περιεχόμενα της x ταξινομημένα, χωρίς να πειράξουμε τη x σωστός τρόπος αντιγραφής λίστας H λειτουργεία της κατάτμησης επιστρέφει μια νέα λίστα >>> x = [4, 6, 2, 1, 7, 9] >>> y=x[:] >>> y.sort() >>> y [1, 2, 4, 6, 7, 9] >>> x [4, 6, 2, 1, 7, 9] εναλλακτικά: y = list(x) y.sort() y = sorted(x)

31 Αντίστροφη ταξινόμηση
Άσκηση: Ταξινόμησε τη λίστα x τοποθετώντας τα στοιχεία από το μεγαλύτερο στο μικρότερο Αλλιώς: x.sort(reverse=True) Μεγάλη γκάμα δυνατοτήτων ταξινόμησης στην Python: >>> x = [4, 6, 2, 1, 7, 9] >>> x.sort() >>> x.reverse() >>> x [9, 7, 6, 4, 2, 1]

32 Μέθοδοι και Συναρτήσεις
Η συνάρτηση είναι ένα κομμάτι κώδικα που επιτελεί μια λειτουργία. Καλείται με ορίσματα. Π.χ., sorted(x) Η μέθοδος είναι ένα κομμάτι κώδικα που επιτελεί μια λειτουργία που καλείται από ένα αντικείμενο (π.χ., από μία λίστα ή ένα αλφαριθμητικό) Π.χ., x.sort() Η διαφορά είναι ότι η συνάρτηση δουλεύει με τα ορίσματα που της δίνονται. Η μέθοδος έχει πρόσβαση σε όλα τα δεδομένα του αντικειμένου.

33 Μεταβλητές (ξανά!) Γενικά μια μεταβλητή αναφέρεται σε ένα αντικείμενο (αριθμός, αλφαριθμητικό, λίστα, κλπ.) >>> x = 5 >>> lst = [1,2,3,4] x lst 5 [1,2,3,4]

34 Μεταβλητές (ξανά!) Υπάρχουν δύο τύποι αντικειμένων: μεταβαλλόμενα και μη μεταβαλλόμενα μεταβαλλόμενα: λίστες μή μεταβαλλόμενα: αριθμοί, αλφαριθμητικά, πλειάδες >>> x = 5 >>> lst = [1,2,3,4] x lst 5 [1,2,3,4]

35 Μεταβλητές (ξανά!) Ο μόνος τρόπος να αλλάξουμε ένα μη μεταβαλλόμενο αντικείμενο είναι να ορίσουμε ένα νέο αντικείμενο για τη μεταβλητή μας >>> x = 7 x lst 5 7 [1,2,3,4]

36 Μεταβλητές (ξανά!) Αντίθετα, μπορούμε να αλλάξουμε ένα μεταβαλλόμενο αντικείμενο, χωρίς να χρειαστεί να ορίσουμε νέο >>> lst[2] = 7 lst [1,2,3,4] 7

37 Μεταβλητές (ξανά!) Αν εξισώσουμε 2 μεταβλητές, αυτές θα αναφέρονται στο ίδιο αντικείμενο. Αν το αντικείμενο είναι μεταβαλλόμενο και αλλάξει, οι τιμές και των δύο μεταβλητών αλλάζουν >>> lst = [1,2,3,4] lst lstNew >>> lstNew = lst >>> lst[2] = 7 [1,2,3,4] 7 >>> lstNew [1, 2, 7, 4]

38 Μεταβλητές (ξανά!) Αν εξισώσουμε 2 μεταβλητές, αυτές θα αναφέρονται στο ίδιο αντικείμενο. Αν το αντικείμενο είναι μη μεταβαλλόμενο και αλλάξουμε τη μία μεταβλητή, τότε αυτή θα αναφέρεται σε άλλο αντικείμενο >>> x = 5 y x >>> y = x 7 >>> x = 7 5 >>> y 5

39 Μεταβλητές Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> x = [[1,2],[3,4]] >>> y = list(x) >>> y.append(5) >>> y [[1, 2], [3, 4], 5] >>> x [[1, 2], [3, 4]] >>> y[1][0] = 0 [[1, 2], [0, 4], 5] [[1, 2], [0, 4]]

40 Μεταβλητές Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> x = [[1,2],[3,4]] >>> y = list(x) >>> y.append(5) >>> y [[1, 2], [3, 4], 5] >>> x [[1, 2], [3, 4]] >>> y[1][0] = 0 [[1, 2], [0, 4], 5] [[1, 2], [0, 4]] [1,2] [3,4] x

41 Μεταβλητές Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> x = [[1,2],[3,4]] >>> y = list(x) >>> y.append(5) >>> y [[1, 2], [3, 4], 5] >>> x [[1, 2], [3, 4]] >>> y[1][0] = 0 [[1, 2], [0, 4], 5] [[1, 2], [0, 4]] [1,2] [3,4] x y

42 Μεταβλητές Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> x = [[1,2],[3,4]] >>> y = list(x) >>> y.append(5) >>> y [[1, 2], [3, 4], 5] >>> x [[1, 2], [3, 4]] >>> y[1][0] = 0 [[1, 2], [0, 4], 5] [[1, 2], [0, 4]] [1,2] [3,4] x 5 y

43 Μεταβλητές Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> x = [[1,2],[3,4]] >>> y = list(x) >>> y.append(5) >>> y [[1, 2], [3, 4], 5] >>> x [[1, 2], [3, 4]] >>> y[1][0] = 0 [[1, 2], [0, 4], 5] [[1, 2], [0, 4]] [1,2] [0,4] x 5 y

44 Άσκηση Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> I = 3*[[0,0,0]] >>> I [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> I[0][0]= 1 >>> I[1][1]= 1 >>> I[2][2]= 1 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]

45 Άσκηση Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> I = 3*[[0,0,0]] >>> I [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> I[0][0]= 1 >>> I[1][1]= 1 >>> I[2][2]= 1 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] Ι [0,0,0]

46 Άσκηση Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> I = 3*[[0,0,0]] >>> I [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> I[0][0]= 1 >>> I[1][1]= 1 >>> I[2][2]= 1 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] Ι [1,0,0]

47 Άσκηση Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> I = 3*[[0,0,0]] >>> I [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> I[0][0]= 1 >>> I[1][1]= 1 >>> I[2][2]= 1 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] Ι [1,1,0]

48 Άσκηση Τι θα τυπώσει η παρακάτω ακολουθία εντολών;
>>> I = 3*[[0,0,0]] >>> I [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> I[0][0]= 1 >>> I[1][1]= 1 >>> I[2][2]= 1 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] Ι [1,1,1]

49 Μέθοδοι λίστών Οι λίστες είναι η κύρια δομή δεδομένων στην Python.
Υποστηρίζονται από μεγάλο αριθμό μεθόδων >>> help(list) Help on class list in module builtins: class list(object) | list() -> new empty list | list(iterable) -> new list initialized from iterable's items | | Methods defined here:

50 Πλειάδες Οι πλειάδες (tuples) είναι ακολουθίες, όπως οι λίστες, οι οποίες όμως δεν μπορούν να αλλαχθούν Το ίδιο ισχύει και για τα αλφαριθμητικά (strings) >>> x=1,2,3 >>> x (1, 2, 3) >>> x[2] 3 >>> x[2] = 5 Traceback (most recent call last): File "<pyshell#212>", line 1, in <module> x[2] = 5 TypeError: 'tuple' object does not support item assignment

51 Πλειάδες - αρχικοποίηση
το κόμμα στο τέλος υπονοεί πλειάδα με ένα στοιχείο x = 1 (χωρίς κόμμα) ορίζει οτί το x είναι ακέραιος αριθμός και όχι πλειάδα! >>> x = 1, >>> x (1,) >>> x = tuple([1]) >>> tuple([1, 2, 3]) (1, 2, 3) >>> tuple('abc') ('a', 'b', 'c') >>> tuple((1, 2, 3)) >>> z = tuple() >>> z ()

52 Λειτουργίες σε Πλειάδες
Ακριβώς όπως οι λειτουργίες σε λίστες (π.χ. slicing) Διαφορές Οι πλειάδες δεν μπορούν να αλλαχθούν Οι πλειάδες δεν έχουν όλες τις μεθοδους λιστών συγκεκριμένα: δεν έχουν τις μεθόδους που αλλάζουν τις λίστες >>> x=1,2,3 >>> x[:2] (1, 2) >>> x.count(2) 1 >>> x.index(3) 2 >>> x.sort() Traceback (most recent call last): File "<pyshell#209>", line 1, in <module> x.sort() AttributeError: 'tuple' object has no attribute 'sort'

53 Γιατί πλειάδες; Αφου οι πλειάδες έχουν περιορισμένη λειτουργικότητα σε σχέση με τις λίστες, γιατί τις χρησιμοποιούμε; Κάποιες λειτουργίες που θα δούμε αργότερα (π.χ. κλειδιά σε λεξικό) υποστηρίζονται με πλειάδες Κάποιες συναρτήσεις επιστρέφουν το αποτέλεσμά τους σε μορφή πλειάδων, οπότε πρέπει να ξέρουμε πως να τις χειριστούμε Στη γενική περίπτωση στα προγράμματα χρησιμοποιούμε λίστες αντί για πλειάδες

54 Μετατροπές >>> l = list((1,2,3)) >>> l [1, 2, 3]
>>> t = tuple(l) >>> t (1, 2, 3) >>> l = list("hello") ['h', 'e', 'l', 'l', 'o'] >>> s = "".join(l) >>> s 'hello' >>> l = 3*["a rose"] >>> " is ".join(l) 'a rose is a rose is a rose' join: μέθοδος των strings η οποία παίρνει μια λίστα από strings και τα συνενώνει με διαχωριστικό το string που καλεί την μέθοδο


Κατέβασμα ppt "ΜΥΥ105: Εισαγωγή στον Προγραμματισμό"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google