Ένας οδηγός για ισοπέδωση λίστας και λίστας λιστών στην 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 αντί για έναν τελεστή συνένωσης. Μπορούμε επίσης να χρησιμοποιήσουμε κατανοήσεις λιστών αντί για βρόχους.

  Πώς να ρυθμίσετε και να τοποθετήσετε την ecobee SmartCamera

Και οι δύο κάνουν την ίδια δουλειά. Ας δούμε τον επόμενο τρόπο επίλυσης του προβλήματος.

#2. Itertools – Αλυσίδα

Θα χρησιμοποιήσουμε μια μέθοδο που ονομάζεται αλυσίδα από την ενσωματωμένη ενότητα itertools.

Η αλυσίδα μεθόδων επαναλαμβάνεται σε κάθε υπολίστα και επιστρέφει τα στοιχεία μέχρι να μην υπάρχουν υπολίστες σε αυτήν. Επιστρέφει ένα iterable που πρέπει να το μετατρέψουμε σε λίστα.

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

  • Αρχικοποιήστε τη λίστα των λιστών με εικονικά δεδομένα και ονομάστε την ως δεδομένα.
  • Λάβετε το flatten iterable χρησιμοποιώντας itertools.chain(*data).
  • Μετατρέψτε τον επαναληπτικό που προκύπτει σε λίστα.
  • Εκτυπώστε τη λίστα ισοπέδωσης.
  Πώς να χρησιμοποιήσετε Python Not Equal and Equal Operators

Μπορείτε να διαβάσετε τον κώδικα στο παρακάτω απόσπασμα.

# 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 για να ελέγξετε την έξοδο.
  Πώς να αντικατοπτρίσετε ένα τηλέφωνο, Mac ή υπολογιστή σε ένα Fire TV Stick

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

# 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, αλλά ένιωσα ότι οι παραπάνω είναι ίσως οι πιο εύκολοι.

Καλή Κωδικοποίηση 🙂