Κατανόηση λίστας σε Python – με παραδείγματα

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

Η συνοπτική σύνταξή τους σάς επιτρέπει να δημιουργείτε νέες λίστες σε μία μόνο γραμμή κώδικα. Και αυτό το σεμινάριο θα σας διδάξει πώς μπορείτε να το κάνετε αυτό.

Μέσα στα επόμενα λεπτά, θα μάθετε:

  • Πώς να δημιουργήσετε μια νέα λίστα χρησιμοποιώντας βρόχους for,
  • Η σύνταξη για τη χρήση κατανοήσεων λιστών στην Python και
  • Τρόπος τροποποίησης των κατανοήσεων λίστας με την εντολή if υπό όρους.

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

Ας βουτήξουμε.🌊

Πώς να δημιουργήσετε λίστες Python χρησιμοποιώντας βρόχους

Ας υποθέσουμε ότι έχετε μια λίστα με αριθμούς αριθμούς. Και θα θέλατε να δημιουργήσετε μια άλλη λίστα που περιέχει τον κύβο όλων των αριθμών σε αριθμούς. Δείτε πώς θα το κάνετε χρησιμοποιώντας έναν βρόχο for στην Python:

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# Output
[8, 27, 125, 343]

Στον παραπάνω κώδικα, έχουμε τα εξής βήματα:

  • Ξεκινήστε μια κενή λίστα num_cubes.
  • Περιηγηθείτε στη λίστα αριθμών.
  • Αποκτήστε πρόσβαση σε κάθε αριθμό num και υπολογίστε τον κύβο του χρησιμοποιώντας τον τελεστή εκθέσεως: num**3.
  • Τέλος, προσθέστε την τιμή σε κύβους στη λίστα num_cubes

Σημείωση: Στην Python, ο τελεστής εκθέσεως ** χρησιμοποιείται με τη σύνταξη: num**pow—ο αριθμός num αυξάνεται στο power pow.

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

Σύνταξη κατανόησης λίστας Python

Η γενική σύνταξη για την κατανόηση λίστας φαίνεται παρακάτω.

<new_list> = [<expression> for <item> in <iterable>]

Ας αναλύσουμε την παραπάνω σύνταξη.

  • Στην Python, οι λίστες οριοθετούνται από ένα ζευγάρι αγκύλες []—επομένως, πρέπει να επισυνάψετε τη δήλωση κατανόησης της λίστας [].
  • Το στο σημαίνει ότι κάνετε loop μέσω ενός iterable. Κάθε αντικείμενο Python στο οποίο μπορείτε να πραγματοποιήσετε βρόχο και να αποκτήσετε πρόσβαση σε μεμονωμένα στοιχεία—όπως οι λίστες, οι πλειάδες και οι συμβολοσειρές είναι επαναληπτικές.
  • είναι η έξοδος που θέλετε να υπολογίσετε για κάθε στο .

Και αυτό ακούγεται απλό, ναι;

Στην ουσία, θα θέλατε να κάνετε κάτι για όλα τα στοιχεία στη λίστα (ή οποιοδήποτε επαναλαμβανόμενο) για να λάβετε μια νέα λίστα.

Χρησιμοποιώντας αυτό, μπορούμε να απλοποιήσουμε τη σύνταξη, όπως φαίνεται στην παρακάτω εικόνα.

Σύνταξη Comprehension List Python (Εικόνα από συγγραφέα)

Τώρα που μάθατε τη σύνταξη, ήρθε η ώρα να ξεκινήσετε την κωδικοποίηση. Μπορείτε να χρησιμοποιήσετε το διαδικτυακό IDE Python του grtechpc.org για να ακολουθήσετε αυτά τα παραδείγματα. Ή μπορείτε να τα εκτελέσετε στον τοπικό σας υπολογιστή.

Παραδείγματα κατανόησης λίστας Python

Στην προηγούμενη ενότητα, δημιουργήσατε μια νέα λίστα num_cubes από το nums. Ας ξεκινήσουμε ξαναγράφοντας το χρησιμοποιώντας την κατανόηση λίστας.

Χρήση της κατανόησης λίστας με αριθμούς

Τώρα ας χρησιμοποιήσουμε την απλοποιημένη σύνταξη ως εξής:

  • : Εδώ, πρέπει να κάνετε κύβους κάθε αριθ. Αντικαταστήστε λοιπόν το με το num**3.
  • : Η μεταβλητή βρόχου είναι num—οι μεμονωμένοι αριθμοί στη λίστα.
  • : Η υπάρχουσα λίστα που έχουμε είναι nums.
  • Και [num**3 for num in nums] είναι η τελική έκφραση. ✅

Συνδυάζοντας τα όλα μαζί, έχουμε το ακόλουθο απόσπασμα κώδικα:

num_cubes = [num**3 for num in nums]
print(num_cubes)

# Output
[8, 27, 125, 343]

Συγχαρητήρια, έχετε κωδικοποιήσει την πρώτη σας κατανόηση της λίστας.🎉

Προχωρώντας, ας δουλέψουμε με συμβολοσειρές Python.

Χρήση της κατανόησης λίστας με συμβολοσειρές

Ας υποθέσουμε ότι έχετε τους συντάκτες της λίστας — μπορείτε να ξαναγράψετε την παρακάτω λίστα με τους αγαπημένους σας συγγραφείς.😄

authors = ["jane austen","george orwell","james clear","cal newport"]

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

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

Να λοιπόν το μόνο που χρειάζεται να κάνετε:

  • πραγματοποιήστε βρόχο στη λίστα των συγγραφέων και για κάθε συγγραφέα στη λίστα,
  • καλέστε την author.title() για να λάβετε ένα αντίγραφο της συμβολοσειράς με κεφαλαία τίτλο.

Και ο κώδικας Python για αυτό φαίνεται παρακάτω:

authors = ["jane austen","george orwell","james clear","cal newport"]

author_list = [author.title() for author in authors]
print(author_list)

# Output
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

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

Χρήση της κατανόησης λίστας με πολλαπλές λίστες

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

Για παράδειγμα, εξετάστε αυτό το πρόβλημα: Έχετε δύο λίστες l_arr και b_arr που περιέχουν τα μήκη και τα πλάτη 4 ορθογωνίων.

Και πρέπει να δημιουργήσετε μια νέα περιοχή λίστας που να περιλαμβάνει την περιοχή αυτών των 4 ορθογωνίων. Θυμηθείτε, εμβαδόν = μήκος * πλάτος.

l_arr = [4,5,1,3]
b_arr = [2,1,7,9]

Θα χρειαστείτε στοιχεία και από τις δύο λίστες (l_arr και b_arr) για να υπολογίσετε την περιοχή. Και μπορείτε να το κάνετε χρησιμοποιώντας τη συνάρτηση zip() της Python.

Σημείωση: Στην Python, η συνάρτηση zip() δέχεται ένα ή περισσότερα iterables ως ορίσματα με τη σύνταξη zip(*iterables). Στη συνέχεια, επιστρέφει έναν επαναλήπτη πλειάδων, όπου η πλειάδα i περιέχει το στοιχείο i από κάθε έναν από τους επαναληπτικούς.

Η παρακάτω εικόνα το περιγράφει λεπτομερώς. Έχετε 4 τιμές στο l_arr και b_arr, επομένως το εύρος των δεικτών είναι από 0 έως 3. Όπως μπορείτε να δείτε, η πλειάδα 0 περιέχει l_arr[0] και b_arr[0]η πλειάδα 1 περιέχει l_arr[1] και b_arr[1]και ούτω καθεξής.

Λειτουργία Python zip() (Εικόνα από συγγραφέα)

Επομένως, μπορείτε να κάνετε βρόχο μέσω του zip(l_arr,b_arr) όπως φαίνεται παρακάτω:

area = [l*b for l,b in zip(l_arr,b_arr)]
print(area)

# Output
[8,5,7,27]

Στην επόμενη ενότητα, θα μάθετε πώς να χρησιμοποιείτε εντολές υπό όρους μέσα σε μια κατανόηση λίστας.

Κατανόηση λίστας Python με σύνταξη συνθηκών

Ας ξεκινήσουμε βασίζοντας την προηγούμενη σύνταξη για την κατανόηση της λίστας.

Εδώ είναι η σύνταξη:

<new_list> = [<expression> for <item> in <iterable> if <condition>]

Αντί να υπολογίσετε την <έκφραση> για όλα τα στοιχεία, θα θέλατε να το κάνετε μόνο για εκείνα τα στοιχεία που ικανοποιούν μια συγκεκριμένη <συνθήκη>—όπου, συνθήκη := True. Και αυτό οδηγεί σε μια απλοποιημένη σύνταξη όπως φαίνεται:

Κατανόηση λίστας Python με σύνταξη συνθηκών (Εικόνα από συγγραφέα)

▶ Με αυτό, ας προχωρήσουμε σε παραδείγματα κώδικα.

Κατανόηση λίστας Python με παραδείγματα συνθηκών

#1. Σας δίνεται η συμβολοσειρά “Μαθαίνω Python το 2022”. Θα θέλατε να λάβετε μια λίστα με όλα τα ψηφία σε αυτήν τη συμβολοσειρά. Πώς το κάνεις λοιπόν;

Στην Python, η .isdigit() ενεργεί σε έναν χαρακτήρα και επιστρέφει True αν είναι ψηφίο (0-9). αλλιώς επιστρέφει False.

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να συλλέξετε τη λίστα όλων των ψηφίων στη συμβολοσειρά str1.

str1 = "I'm learning Python3 in 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# Output
['3', '2', '0', '2', '2']

Στον παραπάνω κώδικα:

  • κάνετε βρόχο μέσα από τη συμβολοσειρά str1,
  • αποκτήστε πρόσβαση σε κάθε char για να ελέγξετε αν είναι ψηφίο χρησιμοποιώντας τη μέθοδο isdigit() και
  • προσθέστε χαρακτήρες στα νέα ψηφία της λίστας μόνο εάν είναι ψηφίο.

Ας πάρουμε ένα άλλο παράδειγμα.

#2. Έχετε μια λίστα με φρούτα.🍊 Και θέλετε να δημιουργήσετε μια λίστα starts_with_b που περιέχει όλα τα φρούτα από τη λίστα φρούτων που ξεκινούν με β. Μπορείτε να χρησιμοποιήσετε τη μέθοδο startswith() για να γράψετε τη συνθήκη.

Το .startswith(‘char’) επιστρέφει True αν το ξεκινά με ‘char’; αλλιώς επιστρέφει False.

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# Output
['blueberry', 'banana']

Στην παραπάνω έξοδο, παίρνουμε «μύρτιλο» και «μπανάνα» που είναι τα δύο φρούτα που ξεκινούν με «β» στη λίστα φρούτων, όπως περιμέναμε.

Και αυτό ολοκληρώνει τη συζήτησή μας για την κατανόηση της λίστας.

συμπέρασμα

Ελπίζω αυτό το σεμινάριο να σας βοήθησε να κατανοήσετε τις κατανοήσεις λιστών στην Python.

Ας συνοψίσουμε:

  • Μπορείς να χρησιμοποιήσεις [<do this> for <all-items> in <this-list>] για να δημιουργήσετε μια νέα λίστα χρησιμοποιώντας την κατανόηση λίστας.
  • Επιπλέον, μπορείτε να χρησιμοποιήσετε τη σύνταξη [<do this> for <all-items> in <this-list> if <condition-is-True>] με την υπό όρους δήλωση if.

Επιπλέον, έχετε επίσης κωδικοποιήσει αρκετά παραδείγματα. Ως επόμενο βήμα, μπορείτε να δοκιμάσετε να ξαναγράψετε μερικούς από τους υπάρχοντες βρόχους Python για δημιουργία λίστας χρησιμοποιώντας την κατανόηση λίστας. Καλή κωδικοποίηση! Μέχρι το επόμενο tutorial.😄

Μπορείτε τώρα να δείτε πώς να μετατρέψετε μια λίστα σε λεξικό ή να μάθετε πώς να χειρίζεστε αρχεία στην Python.

  Πώς να απενεργοποιήσετε το κλείδωμα αριθμών πληκτρολογίου Logitech