ΕΙΣΑΓΩΓΗ
Στο σημερινό
δωρεάν μάθημα Python θα
δούμε πως μπορούμε να μειώσουμε τον κώδικα μας όταν ασχολούμαστε με list χρησιμοποιώντας list comprehension, πότε ακριβώς χρησιμοποιείται το 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( ), θα πολλαπλασιάζει το κάθε element με το 5 και θα προσθέτει την τιμή στο
list. Εκτελώντας
το print( ) βλέπουμε
όλες τις τελικές τιμές που έχουμε αποθηκεύσει στο list.
Σε αυτό το απλό παράδειγμα, χρειάστηκαν 2 γραμμές κώδικα για να δημιουργήσουμε την λογική που θέλουμε να εκτελέσει το πρόγραμμα μας. Σε άλλες περιπτώσεις αυτή η λογική μπορεί να είναι περισσότερες από δύο γραμμές κώδικα. Τι είναι λοιπόν ένα list comprehension? Το list comprehension είναι ο τρόπος που μας προσφέρει η Python να μπορούμε να γεμίζουμε με δεδομένα ένα list γράφοντας μόνο μια γραμμή κώδικα.
Μπορούμε
λοιπόν να αντικαταστήσουμε τις γραμμές κώδικα του ορισμού του άδειου list, του for loop και του append( ) method με μόνο μια γραμμή. Ενώ ο χρόνος
εκτέλεσης του προγράμματος θα παραμένει ο ίδιος, σίγουρα ο κώδικας σας θα είναι
λιγότερος και περισσότερο οργανωμένος. Πως λοιπόν συντάσσουμε ένα list comprehension?
ΠΩΣ ΣΥΝΤΑΣΣΟΥΜΕ ΕΝΑ LIST COMPREHENSION
Για να
εξηγήσουμε πως ακριβώς συντάσσουμε ένα list comprehension ας δούμε πρώτα πως θα μπορούσαμε να
βελτιώσουμε το προηγούμενο παράδειγμα γράφοντας το σαν list comprehension.
app.py
my_list = [x * 5 for x in range(1, 11)]print(my_list)
Output
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
Ο γενικός
τρόπος σύνταξης ενός list comprehension είναι ο εξής:
result = [ transform
iteration filter ]
Εμείς στο
προηγούμενο παράδειγμα δημιουργήσαμε ένα iteration (που είναι το for loop) το οποίο για κάθε τιμή του range( ) θα εκτελεστεί το transform το οποίο για εμάς είναι x*5. Τα list
comprehensions δηλώνονται
μέσα σε square brackets ( [ ] ).
LIST COMPREHENSION WITH IF-ELSE STATEMENTS
Με βάση το
γενικό ορισμό του list comprehension μπορούμε να προσθέσουμε και filters δηλαδή if-statements που φιλτράρουν τις τιμές πριν τις αναθέσουμε
στο τελικό list. Ας δούμε πως υλοποιείται ένα τέτοιο απλό παράδειγμα.
app.py
my_list = [x * 5 for x in range(1, 11) if x % 2 == 0]print(my_list)
Output
[10, 20, 30, 40, 50]
Για κάθε
τιμή του x που
ανήκει μέσα στο εύρος τιμών του range( ), κάνουμε πρώτα έναν έλεγχο αν είναι ζυγός αριθμός.
Αν ναι, τότε δίνουμε την τιμή να εκτελεστεί από το transform σκέλος της εντολή που στο δικό μας παράδειγμα
δεν κάνει τίποτα απλά δέχεται την τιμή.
Φυσικά
μπορούμε να προσθέσουμε και το else μαζί με το if για να έχουμε έναν ολοκληρωμένο κώδικα συνθήκης. Όταν
προσθέτουμε και το else, τότε μετακινούμε την συνθήκη πριν από το iteration.
app.py
my_list = ["Even" if x % 2 == 0 else "Odd" for x in range(1, 11)]print(my_list)
Output
['Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even']
Ας δημιουργήσουμε
ένα ακόμα παράδειγμα όπου έχουμε δύο lists που περιέχουν ποδοσφαιρικές ομάδες. Θέλουμε να βρούμε ποιες
ομάδες είναι κοινές και στα δύο list.
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
['Arsenal', 'Everton']
Τα list comprehensions δεν εφαρμόζονται μόνο σε list αλλά και σε dictionaries. Για αυτά όμως θα μιλήσουμε στην
επόμενη ενότητα.
Μην ξεχάσετε
να κάνετε ένα μικρό donationέτσι ώστε αυτό το siteνα μεγαλώσει ακόμα πιο πολύ
και να αποκτήσει περισσότερες δυνατότητες onlineπαράδοσης δωρεάν μαθημάτων.
full-width
0 Comments
Η γνώμη σας είναι σημαντική.