Λίστα κατανοήσεων στην Python

List Comprehensions Python



Οι κατανοήσεις λίστας χρησιμοποιούνται συχνά στην Python για να γράψουν προτάσεις μίας γραμμής που δημιουργούν μια νέα λίστα ή λεξικό κάνοντας βρόχο σε ένα επαναλαμβανόμενο αντικείμενο. Αυτό το άρθρο θα εξηγήσει πώς να χρησιμοποιήσετε τις κατανοήσεις λίστας στην Python, ξεκινώντας με μια βασική εξήγηση για τον τρόπο λειτουργίας των βρόχων στην Python.

Για το Loop στην Python

Μια δήλωση βρόχου for στην Python επαναλαμβάνεται διαδοχικά σε μέλη οποιουδήποτε αντικειμένου, λίστας, συμβολοσειράς κ.λπ. Σε σύγκριση με άλλες γλώσσες προγραμματισμού, η σύνταξή της είναι πολύ πιο καθαρή και δεν απαιτεί μη αυτόματο καθορισμό βημάτων επανάληψης και έναρξη επανάληψης. Αν και υπάρχουν τρόποι για να γίνει η συμπεριφορά του ίδια με άλλες γλώσσες προγραμματισμού (δεν θα καλυφθεί σε αυτό το άρθρο). Μπορείτε επίσης να ασκήσετε κάποιον έλεγχο για βρόχους χρησιμοποιώντας δηλώσεις όπως συνέχιση, διακοπή, μετάβαση κ.λπ. Παρακάτω είναι ένα απλό παράδειγμα του βρόχου για την Python:







ΓιαΧσε εύρος(10):
Τυπώνω(Χ)

Ο παραπάνω βρόχος for θα εκτυπώσει δέκα αριθμούς ξεκινώντας από το 0 και τελειώνοντας στο 9.



Λίστα κατανοήσεων

Η κατανόηση λίστας δεν είναι παρά ένας συντομογραφικός / συνοπτικός τρόπος γραφής πολλαπλών γραμμών για βρόχους σε μια δήλωση μιας γραμμής. Το παρακάτω παράδειγμα κατανόησης λίστας θα δημιουργήσει μια νέα λίστα ως [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] συμπεριλαμβάνοντας όλες τις τιμές του x σε αυτήν.



αριθμούς= [ΧΓιαΧσε εύρος(10)]
Τυπώνω (αριθμούς)

Λάβετε υπόψη ότι η κατανόηση λίστας δημιουργεί πάντα μια νέα λίστα και δεν τροποποιεί τα αρχικά επαναλαμβανόμενα που χρησιμοποιούνται στην έκφραση. Μια τυπική έκφραση κατανόησης λίστας πρέπει να έχει μια ρήτρα για και μπορεί να ακολουθηθεί από if και αλλιώς προτάσεις υπό όρους. Χωρίς χρήση κατανόησης λίστας, το παραπάνω παράδειγμα θα γραφτεί με τον ακόλουθο τρόπο:





αριθμούς= []
ΓιαΧσε εύρος(10):
αριθμούς.προσαρτώ(Χ)

Τυπώνω (αριθμούς)

Απόδοση και αναγνωσιμότητα

Η κατανόηση λίστας είναι ταχύτερη από ό, τι για τους βρόχους. Ωστόσο, αν δεν επαναλάβετε εκατοντάδες χιλιάδες αντικείμενα, δεν θα παρατηρήσετε σημαντικές βελτιώσεις στην απόδοση. Ενώ η κατανόηση λίστας παρέχει έναν συνοπτικό τρόπο γραφής για βρόχους, πολύπλοκες εκφράσεις μπορεί να οδηγήσουν σε κακή αναγνωσιμότητα του κώδικα και αυξημένη λεκτικότητα. Είναι σημαντικό να διατηρείτε τον κώδικα αναγνώσιμο, εκτός εάν η επίτευξη της μέγιστης απόδοσης είναι απόλυτη ανάγκη για το πρόγραμμά σας.

Παράδειγμα: Χρήση σύνταξης κατανοήσεων λίστας με λεξικά και σύνολα

Ένα λεξικό python είναι μια συλλογή στοιχείων που ορίζονται σε ζεύγη κλειδιών-τιμών, ενώ ένα σύνολο είναι μια συλλογή μοναδικών τιμών όπου δεν επιτρέπονται διπλότυπα. Οι κατανοήσεις λίστας μπορούν να χρησιμοποιηθούν και με λεξικά και σύνολα Python. Η σύνταξη διαφέρει ελαφρώς, αντί να τυλίξετε την έκφραση σε τετράγωνα σιδεράκια, θα πρέπει τώρα να χρησιμοποιήσετε σγουρά στηρίγματα. Θα λάβετε επίσης ένα νέο λεξικό / αντικείμενο συνόλου αντί για νέα λίστα.



δεδομένα= {'πόλη':'Νέα Υόρκη', 'όνομα':'John Doe'}

formateded_data= {k: v.τίτλος() Γιαπρος το,vσεδεδομένα.αντικείμενα()}

Τυπώνω (formateded_data)

Το παραπάνω παράδειγμα θα μετατρέψει τιμές συμβολοσειράς σε κεφαλαίο τίτλο και θα δημιουργήσει ένα νέο λεξικό που ονομάζεται formatted_data, του οποίου η έξοδος θα είναι: {‘city’: ‘New York’, ‘name’: ‘John ​​Doe’}. Μπορείτε επίσης να αλλάξετε το λεξικό / σύνολο επί τόπου, καθορίζοντας την υπάρχουσα μεταβλητή λεξικού στην αριστερή πλευρά.

δεδομένα= {'πόλη':'Νέα Υόρκη', 'όνομα':'John Doe'}

δεδομένα= {k: v.τίτλος() Γιαπρος το,vσεδεδομένα.αντικείμενα()}

Τυπώνω (δεδομένα)

Χωρίς χρήση κατανοήσεων λεξικού, ο κώδικας θα μοιάζει με αυτόν:

δεδομένα= {'πόλη':'Νέα Υόρκη', 'όνομα':'John Doe'}

formateded_data= {}

Γιαπρος το,vσεδεδομένα.αντικείμενα():
formateded_data[προς το] =v.τίτλος()

Τυπώνω (formateded_data)

Δεδομένου ότι δεν υπάρχουν ζεύγη κλειδιού-τιμής σε σύνολα, μια κατανόηση συνόλων μπορεί να οριστεί με τον ίδιο τρόπο όπως η κατανόηση λίστας. Η μόνη διαφορά είναι η χρήση σγουρών στηριγμάτων.

Παράδειγμα: Πολλαπλοί βρόχοι σε κατανόηση λίστας

Το παράδειγμα κατανόησης λίστας που αναφέρθηκε παραπάνω είναι βασικό και χρησιμοποιεί ένα μόνο για δήλωση. Παρακάτω είναι ένα παράδειγμα που χρησιμοποιεί πολλαπλούς για βρόχους και μια κατάσταση υπό όρους if.

επίθετα= ['Δίσκος', 'Eoan', 'Εστιακός', 'Πανούργος']

των ζώων= ['Dingo', 'Ερμίνα', 'Ο λάκκος', 'Κάστορας']

κωδικά ονόματα= [x +''+ καιΓιαΧσεεπίθεταΓιακαισετων ζώωνανκαι.ξεκινάει με(Χ[0])]

Τυπώνω (κωδικά ονόματα)

Ο κωδικός θα εμφανίσει [‘Disco Dingo’, ‘Eoan Ermine’, ‘Focal Fossa’] ως έξοδο. Οι δύο για βρόχους περνούν από λίστες επιθέτων και ζώων και τα μέλη τους ενώνονται μεταξύ τους χρησιμοποιώντας ένα κενό, μόνο αν το πρώτο γράμμα και των δύο λέξεων είναι το ίδιο. Χωρίς χρήση κατανοήσεων λίστας, ο κώδικας θα μοιάζει με αυτόν:

επίθετα= ['Δίσκος', 'Eoan', 'Εστιακός', 'Πανούργος']
των ζώων= ['Dingo', 'Ερμίνα', 'Ο λάκκος', 'Κάστορας']

κωδικά ονόματα= []

ΓιαΧσεεπίθετα:
Γιακαισετων ζώων:
ανκαι.ξεκινάει με(Χ[0]):
κωδικά ονόματα.προσαρτώ(x +''+ και)

Τυπώνω (κωδικά ονόματα)

Παράδειγμα: Κατανόηση λίστας με ρήτρα if-else

Το παρακάτω παράδειγμα θα δείξει τη χρήση των προτάσεων if και else στις κατανοήσεις λίστας.

λίστα_αριθμών= [1, 2, 3, 4]
other_list= [5, 6, 7, 8]

αποτέλεσμα= [Αληθής αν (x + y)%2 == 0 αλλού Ψευδής ΓιαΧσελίστα_αριθμώνΓιακαισεother_list]

Τυπώνω (αποτέλεσμα)

Κατά την περιήγηση σε δύο λίστες, η κατανόηση της λίστας παραπάνω ελέγχει εάν το άθροισμα του ζεύγους στοιχείων είναι ζυγό ή όχι. Η εκτέλεση του παραπάνω κώδικα θα σας εμφανίσει [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True] ως έξοδο. Χωρίς χρήση της κατανόησης λίστας, ο κώδικας θα μοιάζει με αυτόν:

λίστα_αριθμών= [1, 2, 3, 4]
other_list= [5, 6, 7, 8]
αποτέλεσμα= []

ΓιαΧσελίστα_αριθμών:
Γιακαισεother_list:
αν (x + y)%2 == 0:
αποτέλεσμα.προσαρτώ(Αληθής)
αλλού:
αποτέλεσμα.προσαρτώ(Ψευδής)

Τυπώνω (αποτέλεσμα)

συμπέρασμα

Η κατανόηση λίστας παρέχει έναν ωραίο τρόπο για να γράψετε καθαρές και συνοπτικές δηλώσεις βρόχου. Ωστόσο, μπορούν γρήγορα να γίνουν πολύπλοκα και δύσκολο να κατανοηθούν εάν χρησιμοποιούνται πολλαπλοί βρόχοι και δηλώσεις υπό όρους. Τελικά, πρόκειται για το επίπεδο άνεσης ενός προγραμματιστή, αλλά γενικά είναι καλή ιδέα να γράψετε σαφή, αναγνώσιμο και εύκολο να διορθώσετε κώδικα αντί να χρησιμοποιήσετε υπερβολικά συντομογραφίες.