Ένας οδηγός για ισοπέδωση λίστας και λίστας λιστών στην Python
Η μετατροπή ενός πίνακα 2D σε έναν πίνακα 1D ονομάζεται ισοπέδωση. Υπάρχουν πολλές προσεγγίσεις για την επίλυση του προβλήματος.
Θα εξερευνήσουμε μερικά από αυτά σε αυτό το σεμινάριο.
Ας δούμε ένα παράδειγμα.
Εισαγωγή
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Παραγωγή
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Πίνακας περιεχομένων
#1. Βρόχοι
Ο πιο συνηθισμένος τρόπος επίλυσης του προβλήματος είναι η χρήση βρόχων. Νομίζω ότι οι περισσότεροι από εσάς το έχετε ήδη καταλάβει. Ας δούμε τα βήματα για την επίλυση του προβλήματος χρησιμοποιώντας βρόχους.
- Αρχικοποιήστε τη λίστα των λιστών με εικονικά δεδομένα και ονομάστε την ως δεδομένα.
- Τώρα, αρχικοποιήστε μια κενή λίστα που ονομάζεται flat_list.
- Επαναλάβετε τα δεδομένα.
- Αποσυσκευάστε όλα τα στοιχεία από την τρέχουσα λίστα.
- Προσθέστε τα στη λίστα flat_list χρησιμοποιώντας τη μέθοδο προσθήκης λίστας.
- Εκτυπώστε το αποτέλεσμα.
Δείτε τον κώδικα για το πρόβλημα παρακάτω.
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
Μπορείτε να χρησιμοποιήσετε έναν άλλο βρόχο για να προσθέσετε στοιχεία υπο-λίστας στη flat_list αντί για έναν τελεστή συνένωσης. Μπορούμε επίσης να χρησιμοποιήσουμε κατανοήσεις λιστών αντί για βρόχους.
Και οι δύο κάνουν την ίδια δουλειά. Ας δούμε τον επόμενο τρόπο επίλυσης του προβλήματος.
#2. Itertools – Αλυσίδα
Θα χρησιμοποιήσουμε μια μέθοδο που ονομάζεται αλυσίδα από την ενσωματωμένη ενότητα itertools.
Η αλυσίδα μεθόδων επαναλαμβάνεται σε κάθε υπολίστα και επιστρέφει τα στοιχεία μέχρι να μην υπάρχουν υπολίστες σε αυτήν. Επιστρέφει ένα iterable που πρέπει να το μετατρέψουμε σε λίστα.
Ας δούμε τα βήματα για την επίλυση του προβλήματος.
- Αρχικοποιήστε τη λίστα των λιστών με εικονικά δεδομένα και ονομάστε την ως δεδομένα.
- Λάβετε το flatten iterable χρησιμοποιώντας itertools.chain(*data).
- Μετατρέψτε τον επαναληπτικό που προκύπτει σε λίστα.
- Εκτυπώστε τη λίστα ισοπέδωσης.
Μπορείτε να διαβάσετε τον κώδικα στο παρακάτω απόσπασμα.
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
#3. Ισοπεδώστε λίστες πολλαπλών επιπέδων
Είδαμε πώς να ισοπεδώνουμε μια λίστα με λίστες. Οι παραπάνω μέθοδοι που συζητήσαμε για την ισοπέδωση της λίστας δεν θα λειτουργήσουν για λίστες πολλών επιπέδων. Ας δούμε ένα παράδειγμα.
Εισαγωγή
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Παραγωγή
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Καθώς δεν γνωρίζουμε το βάθος των λιστών πριν από το πρόγραμμα, πρέπει να χρησιμοποιήσουμε την αναδρομή για να λύσουμε το πρόβλημα.
- Αρχικοποιήστε τα δεδομένα όπως φαίνεται στο παράδειγμα και ονομάστε τα ως δεδομένα.
- Ξεκινήστε μια κενή λίστα που ονομάζεται flat_list.
- Γράψτε μια συνάρτηση που ονομάζεται flatten_list.
- Επαναλάβετε τα στοιχεία της δεδομένης λίστας.
- Εάν το στοιχείο είναι λίστα, τότε καλέστε ξανά την ίδια συνάρτηση αναδρομικά.
- Εάν το στοιχείο δεν είναι λίστα, τότε προσθέστε το στοιχείο στη λίστα flat_list.
- Κλήση της συνάρτησης με δεδομένα.
- Η συνάρτηση θα γεμίσει όλα τα στοιχεία στη λίστα flat_list.
- Εκτυπώστε το flat_list για να ελέγξετε την έξοδο.
Φτου! πολλά βήματα για την κωδικοποίηση. Μην ανησυχείς. Η μετατροπή των παραπάνω δηλώσεων σε κώδικα δεν θα διαρκέσει περισσότερα από λεπτά.
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
Θυμηθείτε, δεν μετατρέψαμε την υπάρχουσα λίστα. Αντίθετα, δημιουργήσαμε μια νέα λίστα με το δεδομένο στοιχείο λίστας.
συμπέρασμα
Ελπίζω να σας άρεσε το σεμινάριο. Μπορεί να υπάρχουν πολλοί άλλοι τρόποι για να ισοπεδώσετε μια λίστα στην Python, αλλά ένιωσα ότι οι παραπάνω είναι ίσως οι πιο εύκολοι.
Καλή Κωδικοποίηση 🙂