INTRODUCTION
Στο σημερινό δωρεάν μάθημα Python, θα ανακαλύψουμε ένα από τα πιο έξυπνα εργαλεία της γλώσσας: το List Comprehension. Θα δούμε πώς αυτή η τεχνική μάς επιτρέπει να γράφουμε πολύ πιο σύντομο και «καθαρό» κώδικα όταν διαχειριζόμαστε λίστες. Παράλληλα, θα αναλύσουμε πότε ακριβώς είναι σωστό να τη χρησιμοποιούμε και ποιες είναι οι πραγματικές της δυνατότητες.
Τι είναι το List Comprehension
Για να κατανοήσουμε πλήρως τι ακριβώς κάνει το List Comprehension και γιατί είναι τόσο χρήσιμο, η καλύτερη προσέγγιση είναι μέσα από ένα παράδειγμα. Ας σκεφτούμε πρώτα πώς θα λύναμε ένα συγκεκριμένο πρόβλημα με τις γνώσεις που έχουμε αποκομίσει μέχρι τώρα. Έστω ότι θέλουμε να δημιουργήσουμε μια νέα λίστα (list) που να περιέχει τους αριθμούς από το 1 έως το 10, αλλά θέλουμε ταυτόχρονα ο κάθε αριθμός να πολλαπλασιάζεται με το 5. Πώς θα γράφαμε αυτόν τον κώδικα με τον κλασικό τρόπο;
app.py
my_list = []for x in range(1, 11):my_list.append(x * 5)print(my_list)
Output
Αρχικά, ας δούμε την κλασική μέθοδο: χρησιμοποιούμε ένα for loop το οποίο, για κάθε αριθμό μέσα στο range(), τον πολλαπλασιάζει με το 5 και τον προσθέτει στη λίστα. Τυπώνοντας τη λίστα με την print(), βλέπουμε το τελικό αποτέλεσμα. Σε αυτό το απλό σενάριο, χρειαστήκαμε μερικές γραμμές κώδικα για να πετύχουμε τον στόχο μας (συν τον αρχικό ορισμό της άδειας λίστας). Σε πιο σύνθετα προβλήματα, οι γραμμές αυτές αυξάνονται.
Τι είναι, λοιπόν, το List Comprehension; Είναι ο κομψός τρόπος που μας προσφέρει η Python για να γεμίζουμε μια λίστα με δεδομένα, γράφοντας μόνο μία γραμμή κώδικα! Ουσιαστικά, αντικαθιστούμε τον ορισμό της άδειας λίστας, το for loop και τη μέθοδο append() με μία και μόνο εντολή. Ο χρόνος εκτέλεσης παραμένει ο ίδιος, αλλά ο κώδικάς μας γίνεται πολύ πιο σύντομος και οργανωμένος. Πώς συντάσσουμε, όμως, ένα List Comprehension;
Πώς Συντάσσουμε ένα List Comprehension
Για να εξηγήσουμε πώς ακριβώς γράφεται (συντάσσεται) ένα List Comprehension, ο καλύτερος τρόπος είναι να περάσουμε κατευθείαν στην πράξη. Ας δούμε, λοιπόν, πώς μπορούμε να μετατρέψουμε και να βελτιώσουμε το προηγούμενο παράδειγμά μας, γράφοντάς το πλέον στη νέα, σύντομη μορφή του.
app.py
my_list = [x * 5 for x in range(1, 11)]print(my_list)
Output
Ο γενικός κανόνας σύνταξης ενός List Comprehension έχει την εξής μορφή:
result = [transform iteration filter]
Όπως παρατηρείτε, όλη η λογική περικλείεται υποχρεωτικά μέσα σε αγκύλες ([ ]). Ας το συνδέσουμε με το προηγούμενο παράδειγμά μας: Το iteration είναι η επανάληψή μας (δηλαδή το for loop που διατρέχει το range()). Για κάθε τιμή αυτής της επανάληψης, εκτελείται το transform (η πράξη/μετατροπή), που στη δική μας περίπτωση ήταν ο πολλαπλασιασμός x * 5.
List Comprehension με If-Else Statements
Βασιζόμενοι στον γενικό κανόνα σύνταξης του List Comprehension που μόλις είδαμε, ήρθε η ώρα να μιλήσουμε για το τρίτο κομμάτι: τα filters. Ουσιαστικά, πρόκειται για if statements που μας επιτρέπουν να "φιλτράρουμε" τα δεδομένα μας εν κινήσει, επιλέγοντας με ακρίβεια ποιες τιμές θα μπουν στην τελική μας λίστα και ποιες θα απορριφθούν. Ας δούμε πώς ακριβώς υλοποιείται ένα τέτοιο πρακτικό παράδειγμα.
app.py
my_list = [x * 5 for x in range(1, 11) if x % 2 == 0]print(my_list)
Output
Για κάθε τιμή του x που διατρέχει το range(), το πρόγραμμα κάνει πρώτα έναν έλεγχο για το αν ο αριθμός είναι ζυγός. Αν η συνθήκη ισχύει, τότε η τιμή περνάει στο σκέλος του transform της εντολής, το οποίο στο δικό μας παράδειγμα απλώς δέχεται την τιμή ως έχει, χωρίς να κάνει κάποια επιπλέον μαθηματική πράξη.
Φυσικά, μπορούμε να εμπλουτίσουμε τη δομή μας προσθέτοντας και ένα else μαζί με το if, δημιουργώντας έτσι μια πιο ολοκληρωμένη συνθήκη. Προσοχή όμως σε μια σημαντική λεπτομέρεια: όταν προσθέτουμε και το else, η θέση της συνθήκης αλλάζει και μετακινείται πριν από το σκέλος του iteration (δηλαδή πριν από το for).
app.py
my_list = ["Even" if x % 2 == 0 else "Odd" for x in range(1, 11)]print(my_list)
Output
Ας προχωρήσουμε σε ένα ακόμα, πολύ πρακτικό παράδειγμα. Έστω ότι έχουμε στη διάθεσή μας δύο ξεχωριστές λίστες (lists), οι οποίες περιέχουν ονόματα ποδοσφαιρικών ομάδων. Ο στόχος μας εδώ είναι να συγκρίνουμε αυτά τα δεδομένα και να βρούμε ποιες ακριβώς ομάδες είναι κοινές και στις δύο λίστες, χρησιμοποιώντας φυσικά τη δύναμη του List Comprehension.
app.py
teama = ['Arsenal', 'Burnley', 'Everton', 'Aston Villa']teamb = ['Chelsea', 'Arsenal', 'Liverpool', 'Everton']common_teams = [i for i in teama if i in teamb]print(common_teams)
Output
Τι ακολουθεί; Κλείνοντας, αξίζει να αναφέρουμε κάτι πολύ ενδιαφέρον: τα comprehensions δεν εφαρμόζονται μόνο σε λίστες, αλλά και σε λεξικά (dictionaries)! Για τα λεγόμενα Dictionary Comprehensions, όμως, θα μιλήσουμε αναλυτικά στην επόμενη ενότητά μας.
Στηρίξτε την προσπάθειά μας! Αν βρήκατε αυτό το δωρεάν μάθημα χρήσιμο, μην ξεχάσετε πως μπορείτε να κάνετε ένα μικρό donation. Η υποστήριξή σας βοηθάει αυτό το site να μεγαλώσει και να αποκτήσει ακόμα περισσότερες δυνατότητες για την online παράδοση δωρεάν μαθημάτων!
full-width


0 Comments
What do you think about Ground of Code?