PYTHON ΕΝΟΤΗΤΑ 12 – Lists (Part 1)

 

Δωρεάν μαθήματα Python

ΕΙΣΑΓΩΓΗ

Στο σημερινό δωρεάν μάθημα Python θα αναλύσουμε πως η Python ομαδοποιεί πολλαπλά στοιχεία, ποιες επιλογές υπάρχουν για να αποθηκεύσουμε αυτά τα δεδομένα και ποιες είναι οι διαφορές ανάμεσα τους. Η γενικότερη κατηγορία στην οποία ανήκει αυτή η θεωρία ονομάζεται data structures και στο σημερινό δωρεάν μάθημα Python θα μιλήσουμε συγκεκριμένα για το list.

ΟΡΙΣΜΟΣ ΤΟΥ LIST

Όπως οποιοδήποτε άλλο στοιχείο στην Python έτσι και ένα list είναι ένα αντικείμενο (για αυτό θα μιλήσουμε σε μελλοντική ενότητα) το οποίο μπορεί να περιέχει πολλαπλά στοιχεία δεδομένων τα οποία δεν είναι αναγκαίο να έχουν το ίδιο data type.

Ένα list είναι επίσης δυναμικό και μεταβλητή που σημαίνει ότι κατά την διάρκεια εκτέλεσης ενός προγράμματος μπορούμε να προσθέσουμε ή να αφαιρέσουμε στοιχεία από αυτό μεταβάλλοντας το μέγεθος του όπως και το περιεχόμενο του. Αυτός είναι άλλωστε και ο λόγος που λέμε ότι τα list είναι mutable δηλαδή επιτρέπουν αλλαγές στο περιεχόμενο των στοιχείων τους. Σε άλλες γλώσσες προγραμματισμού θα συναντήσετε την ίδια έννοια λειτουργίας με το όνομα array.

 Για να ορίσουμε ένα list στην Python ακολουθούμε τα εξής εύκολα βήματα: μέσα σε square brackets ( [ ] ) δηλώνουμε τα στοιχεία (ή elements όπως επίσημα ονομάζονται) χωρισμένα με κόμμα. Ας δούμε ένα απλό παράδειγμα.

app.py

teams = ['Arsenal', 'Chelsea', 'Everton', 'Liverpool', 'Watford']
print(teams)

Output

['Arsenal', 'Chelsea', 'Everton', 'Liverpool', 'Watford']

Σε αυτό το παράδειγμα, η μεταβλητή teams ισούται με ένα list που αποτελείται από Strings και πιο συγκεκριμένα ονόματα ομάδων. Η λίστα μπορεί, μετά την δήλωση της, να μεγαλώσει ή να μικρύνει δυναμικά ανάλογα με τις ανάγκες τους προγράμματος μας.

Δεν θα ήθελα να συνεχίσω να συγκρίνω το list της Python με κάτι αντίστοιχο από άλλες γλώσσες προγραμματισμού γιατί πολύ απλά το list της Python είναι πολύ πιο ευέλικτο. Για παράδειγμα, ενώ σε άλλες γλώσσες προγραμματισμού δεν επιτρέπεται τα elements να διαφέρουν μεταξύ τους όσο αφορά το data type, η Python το καλωσορίζει.

app.py

teams = ['Arsenal', 1, 'Chelsea', 2, 'Everton',
         3, 'Liverpool', 4, 'Watford', 5]
print(teams)

Output

['Arsenal', 1, 'Chelsea', 2, 'Everton', 3, 'Liverpool', 4, 'Watford', 5]

ΠΩΣ ΔΙΑΒΑΖΟΥΜΕ ELEMENTS ΑΠΟ ΕΝΑ LIST

Τώρα που εξοικειωθήκαμε με την σύνταξη των lists, μπορούμε να προχωρήσουμε και στο επόμενο βήμα που είναι το πώς διαβάζουμε τα elements από ένα list.

Όπως και στα String, έτσι και στα list, υπάρχει ένας index αριθμός ο οποίος ξεκινάει το μέτρημα από τον αριθμό μηδέν. Όπως μεγαλώνει το list μεγαλώνει ταυτόχρονα και το εύρος του index. Για να αποκτήσουμε πρόσβαση σε οποιοδήποτε elements του list δεν έχουμε παρά να γράψουμε το όνομα του list και αμέσως μετά μέσα σε square brackets ( [ ] ) τον αριθμό του index.

app.py

teams = ['Arsenal', 'Chelsea', 'Everton', 'Liverpool', 'Watford']
print(teams[2])

Output

Everton

Στην Python επιτρέπεται επίσης να μπορούμε να μετράμε από το τέλος του list προς την αρχή. Ο αριθμός -1 μας δίνει πρόσβαση στο τελευταίο element του list. Ο αριθμός -2 μας δίνει πρόσβαση στον προτελευταίο αριθμό του list κτλ.

app.py

teams = ['Arsenal', 'Chelsea', 'Everton', 'Liverpool', 'Watford']
print(teams[-2])

Output

Liverpool

Ένα list μπορεί επίσης να περιέχει να περιέχει ή και περισσότερα list σαν elements. Για να αποκτήσουμε πρόσβαση στο element που είναι list απλά προσθέτουμε ένα ακόμα square bracket ( [ ] ) μετά το πρώτο. Το πρώτο bracket ορίζει το element στο list. Το δεύτερο index ορίζει στο συγκεκριμένο element (που είναι list) σε ποιο element θέλουμε να αποκτήσουμε πρόσβαση.

app.py

teams = ['Arsenal', ['Chelsea', 'Everton'], 'Liverpool', 'Watford']
print(teams[1][0])

Output

Chelsea

Χρησιμοποιώντας το index μπορούμε επίσης να αλλάξουμε την τιμή που υπάρχει στο συγκεκριμένο element.

app.py

teams = ['Arsenal', ['Chelsea', 'Everton'], 'Liverpool', 'Watford']
teams[0] = 'Tottenham'
print(teams)

Output

['Tottenham', ['Chelsea', 'Everton'], 'Liverpool', 'Watford']


ΤΙ ΑΚΡΙΒΩΣ ΕΙΝΑΙ ΤΟ LIST SLICING?

Όπως έχετε ήδη καταλάβει, η Python είναι αρκετά ευέλικτη γλώσσα προγραμματισμού και με πλούσια βιβλιοθήκη από λειτουργίες όσο αφορά τα list. Μια από αυτές τις λειτουργίες  είναι η δυνατότητα να διαβάσουμε μια ομάδα από elements ταυτόχρονα αντί να ορίζουμε κάθε ένα index ξεχωριστά. 

Ο απλός τρόπος για να διαβάσουμε μια ομάδα από elements ενός list είναι: list[index1:index2]. Ο πρώτος αριθμός index1 δηλώνει το index από το οποίο θα αρχίζουμε να διαβάζουμε τα elements του list ενώ το index2 δηλώνει σε ποιο index θα σταματήσουμε χωρίς όμως να περιλαμβάνει αυτό τον αριθμό. Οι δύο δηλώσεις των index χωρίζονται από ένα colon ( : ).

app.py

teams = ['Arsenal','Chelsea','Aston Villa',
         'Newcastle', 'Everton', 'Liverpool', 'Watford']
print(teams[1:4])

Output

['Chelsea', 'Aston Villa', 'Newcastle']

Μπορούμε επίσης να χρησιμοποιήσουμε μόνο ένα από τα δύο indexes. Αφήνοντας το index1 και αφαιρώντας το index2 σημαίνει ότι θα διαβάσουμε το list ξεκινώντας από το index1 μέχρι το τέλος της λίστας. Αντίστοιχα, αν κρατήσουμε μόνο το index2 σημαίνει ότι επιθυμούμε να διαβάσουμε από την αρχή του list μέχρι το σημείο που ορίζει το index2.

app.py

teams = ['Arsenal','Chelsea','Aston Villa',
         'Newcastle', 'Everton', 'Liverpool', 'Watford']
print(teams[:3])
print(teams[2:])

Output

['Arsenal', 'Chelsea', 'Aston Villa']
['Aston Villa', 'Newcastle', 'Everton', 'Liverpool', 'Watford']

Υπάρχει μια ακόμα τρίτη μεταβλητή που μπορούμε να προσθέσουμε όταν κάνουμε slicing και ονομάζεται step. Με το step δηλώνουμε τις τιμές που δεν θα περιλάβουμε στο τελικό αποτέλεσμα. Αν για παράδειγμα ορίσουμε σαν step τον αριθμό 2 τότε δηλώνουμε ότι θα διαβάσουμε κάθε δύο elements από το εύρος του slicing που έχουμε ορίσει.

app.py

teams = ['Arsenal','Chelsea','Aston Villa',
         'Newcastle', 'Everton', 'Liverpool', 'Watford']
print(teams[1:5:2])

Output

['Chelsea', 'Newcastle']

ΜΠΟΡΟΥΜΕ ΝΑ ΑΝΤΙΓΡΑΨΟΥΜΕ ΕΝΑ LIST?

Φυσικά και μπορούμε να αντιγράψουμε ένα list αλλά πρέπει να δώσουμε λίγο προσοχή στη θεωρία. Ο λάθος τρόπος να αντιγράψετε ένα list είναι να γράψετε list1 = list2. Με αυτό τον τρόπο απλά έχετε δημιουργήσει δύο ονόματα μεταβλητών που αναφέρονται στο ίδιο ακριβώς σημείο της μνήμης στο οποίο βρίσκονται τα δεδομένα. Το αποτέλεσμα είναι ότι αν διαγράψετε ένα element από το list1 τότε επηρεάζεται και το list2.

app.py

teams = ['Arsenal', 'Chelsea', 'Aston Villa',
         'Newcastle', 'Everton', 'Liverpool', 'Watford']
teams2 = teams
teams[0] = 'Leeds'
print(teams)
print(teams2)

Output

['Leeds', 'Chelsea', 'Aston Villa', 'Newcastle', 'Everton', 'Liverpool', 'Watford']
['Leeds', 'Chelsea', 'Aston Villa', 'Newcastle', 'Everton', 'Liverpool', 'Watford']

Οπότε αν αυτός δεν είναι ακριβώς αυτό που ζητούσαμε ποιος είναι ο καλύτερος τρόπος να αντιγράψουμε ένα list? Η απάντηση είναι απλή: η χρήση του slicing που ήδη έχουμε μάθει. Αυτό που κάνουμε είναι να γράψουμε δύο colon ( :: ) χωρίς να δηλώσουμε κανέναν αριθμό. Το αποτέλεσμα είναι να αντιγράψουμε όλα τα elements από την αρχή μέχρι το τέλος σε ένα καινούργιο list.

app.py

teams = ['Arsenal', 'Chelsea', 'Aston Villa',
         'Newcastle', 'Everton', 'Liverpool', 'Watford']
teams2 = teams[::]
teams[0] = 'Leeds'
print(teams)
print(teams2)

Output

['Leeds', 'Chelsea', 'Aston Villa', 'Newcastle', 'Everton', 'Liverpool', 'Watford']
['Arsenal', 'Chelsea', 'Aston Villa', 'Newcastle', 'Everton', 'Liverpool', 'Watford']

Υπάρχουν ακόμα πολλές δυνατότητες που μπορούμε να εκτελέσουμε με τα list τις οποίες θα καλύψουμε στην επόμενη ενότητα.

Μην ξεχάσετε να κάνετε ένα μικρό donationέτσι ώστε αυτό το siteνα μεγαλώσει ακόμα πιο πολύ και να αποκτήσει περισσότερες δυνατότητες onlineπαράδοσης δωρεάν μαθημάτων.

full-width

Post a Comment

0 Comments