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

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

Λίστα κατανόησης vs For Loop στο Python

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

Παράδειγμα 1: Επανάληψη μέσω συμβολοσειράς Χρήση για βρόχο

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 ('ο άνθρωπος')

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

Ας δούμε πώς μπορεί να γραφτεί το παραπάνω πρόγραμμα χρησιμοποιώντας κατανόηση λίστας.

Παράδειγμα 2: Επανάληψη μέσω συμβολοσειράς Χρησιμοποιώντας κατανόηση λίστας

 h_letters = ( letter for letter in 'human' ) print( h_letters)

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 ('ο άνθρωπος')

Στο παραπάνω παράδειγμα, μια νέα λίστα εκχωρείται στη μεταβλητή h_letters και η λίστα περιέχει τα στοιχεία της επαναλαμβανόμενης συμβολοσειράς «human». Καλούμε print()συνάρτηση για να λάβουμε την έξοδο.

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

 (έκφραση για στοιχείο στη λίστα)

Μπορούμε τώρα να προσδιορίσουμε πού χρησιμοποιούνται οι κατανοήσεις λιστών.

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

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

Λίστα συνεννοήσεων έναντι λειτουργιών Lambda

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

Παράδειγμα 3: Χρήση λειτουργιών Lambda στο List

 letters = list(map(lambda x: x, 'human')) print(letters)

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι

 ('ο άνθρωπος')

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

Προϋποθέσεις στη λίστα κατανόησης

Η κατανόηση λίστας μπορεί να χρησιμοποιήσει δήλωση υπό όρους για να τροποποιήσει την υπάρχουσα λίστα (ή άλλες πλειάδες). Θα δημιουργήσουμε μια λίστα που χρησιμοποιεί μαθηματικούς τελεστές, ακέραιους αριθμούς και εύρος ().

Παράδειγμα 4: Χρήση εάν με Λίστα κατανόησης

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

Η λίστα, number_list, θα συμπληρωθεί από τα στοιχεία που κυμαίνονται από 0-19 εάν η τιμή του στοιχείου διαιρείται με 2.

Παράδειγμα 5: Ένθετο IF με κατανόηση λίστας

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Εδώ, λίστα ελέγχων κατανόησης:

  1. Διαιρείται το 2 με 2 ή όχι;
  2. Διαιρείται το 5 ή όχι;

Εάν το y πληροί και τις δύο προϋποθέσεις, το y επισυνάπτεται στη λίστα αριθμών

Παράδειγμα 6: αν… αλλιώς με κατανόηση λίστας

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι:

 («Ζυγός», «Μονός», «Ζυγός», «Μονός», «Ζυγός», «Μονός», «Ζυγός», «μονός», «ζυγός», «μονός»)

Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even is appended to the obj list. If not, Odd is appended.

Nested Loops in List Comprehension

Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.

Example 7: Transpose of Matrix using Nested Loops

 transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)

Output

 ((1, 4), (2, 5), (3, 6), (4, 8)) 

The above code use two for loops to find transpose of the matrix.

We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.

Example 8: Transpose of a Matrix using List Comprehension

 matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)

When we run the above program, the output will be:

 ((1, 3, 5, 7), (2, 4, 6, 8))

In above program, we have a variable matrix which have 4 rows and 2 columns.We need to find transpose of the matrix. For that, we used list comprehension.

**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2) is executed before row(i) for row in matrix. Hence at first, a value is assigned to i then item directed by row(i) is appended in the transpose variable.

Key Points to Remember

  • List comprehension is an elegant way to define and create lists based on existing lists.
  • List comprehension is generally more compact and faster than normal functions and loops for creating list.
  • However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
  • Θυμηθείτε, κάθε κατανόηση λίστας μπορεί να ξαναγραφεί για βρόχο, αλλά κάθε για βρόχο δεν μπορεί να ξαναγραφεί με τη μορφή κατανόησης λίστας.

ενδιαφέροντα άρθρα...