Προγραμματισμός

Πώς να εργαστείτε με τον τύπο δεδομένων λίστας Python

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

Βασικά στοιχεία λίστας Python

Ο ορισμός μιας λίστας στο Python είναι εύκολος - απλώς χρησιμοποιήστε τη σύνταξη αγκύλης για να υποδείξετε στοιχεία σε μια λίστα.

list_of_ints = [1, 2, 3]

Τα στοιχεία σε μια λίστα δεν πρέπει να έχουν τον ίδιο τύπο. Μπορούν να είναι οποιοδήποτε αντικείμενο Python. (Εδώ, ας υποθέσουμεΤρία είναι μια συνάρτηση.)

list_of_objects = ["One", TWO, Three, {"Four": 4}, Κανένα]

Σημειώστε ότι η ανάμιξη αντικειμένων σε μια λίστα μπορεί να έχει επιπτώσεις στην ταξινόμηση της λίστας. Θα το εξετάσουμε αργότερα.

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

Για το παραπάνω παράδειγμα, list_of_ints [0] αποδόσεις 1. list_of_ints [1] αποδόσεις 2. list_of_objects [4] θα ήταν τοΚανένας αντικείμενο.

Ευρετηρίαση λίστας Python

Εάν χρησιμοποιείτε θετικό ακέραιο για το ευρετήριο, ο ακέραιος υποδεικνύει τη θέση του αντικειμένου που θα αναζητήσετε. Αλλά αν χρησιμοποιείτε ένααρνητικός ακέραιος, τότε ο ακέραιος δείχνει τη θέση ξεκινώντας από τοτέλος της λίστας. Για παράδειγμα, χρησιμοποιώντας ένα ευρετήριο του -1 είναι ένας εύχρηστος τρόπος για να τραβήξετε το τελευταίο στοιχείο από μια λίστα ανεξάρτητα από το μέγεθος της λίστας.

list_of_ints [-1] αποδόσεις3list_of_objects [-1] αποδόσειςΚανένας.

Μπορείτε επίσης να χρησιμοποιήσετε μια ακέραια μεταβλητή ως ευρετήριό σας. Ανx = 0list_of_ints [x] αποδόσεις 1, και ούτω καθεξής.

Προσθήκη και κατάργηση στοιχείων λίστας Python

Η Python έχει διάφορους τρόπους με τους οποίους μπορείτε να προσθέσετε ή να αφαιρέσετε στοιχεία από μια λίστα.

  • .προσαρτώ() εισάγει ένα στοιχείο στοτέλος της λίστας. Για παράδειγμα, list_of_ints.append (4) θα γυρίσειlist_of_ints στη λίστα[1,2,3,4]. Τα προσαρτήματα είναι γρήγορα και αποτελεσματικά. χρειάζεται περίπου το ίδιο χρονικό διάστημα για να προσθέσετε ένα στοιχείο σε μια λίστα, ανεξάρτητα από το πόσο καιρό είναι η λίστα.
  • .κρότος() αφαιρεί και επιστρέφει το τελευταίο στοιχείο από τη λίστα. Αν τρέξαμεx = list_of_ints.pop () στο πρωτότυποlist_of_ints, x θα περιέχει την τιμή3. (Δεν χρειάζεται να εκχωρήσετε τα αποτελέσματα του.κρότος() σε μια τιμή, ωστόσο, εάν δεν τη χρειάζεστε.).κρότος()οι λειτουργίες είναι επίσης γρήγορες και αποτελεσματικές.
  • .εισάγετε() εισάγει ένα στοιχείο σε κάποια αυθαίρετη θέση στη λίστα. Για παράδειγμα,list_of_ints.insert (0,10) θα γυρίσειlist_of_ints σε [10,1,2,3]. Λάβετε υπόψη ότι όσο πιο κοντά εισάγετε στο μπροστινό μέρος της λίστας, τόσο πιο αργή θα είναι αυτή η λειτουργία, αν και δεν θα δείτε μεγάλη επιβράδυνση, εκτός εάν η λίστα σας έχει πολλές χιλιάδες στοιχεία ή κάνετε τα ένθετα σε στενό βρόχο.
  • .pop (x) αφαιρεί το στοιχείο στο ευρετήριοΧ. Έτσιlist_of_ints.pop (0) θα αφαιρούσε το στοιχείο στο ευρετήριο 0. Και πάλι, όσο πιο κοντά είστε στο μπροστινό μέρος της λίστας, τόσο πιο αργή μπορεί να είναι αυτή η λειτουργία.
  • . αφαίρεση (στοιχείο) καταργεί ένα στοιχείο από μια λίστα, αλλάδεν με βάση τον δείκτη του. Μάλλον, .αφαιρώ() αφαιρεί τοπρώτη εμφάνιση του αντικειμένου που καθορίζετε, αναζητώντας από την κορυφή της λίστας προς τα κάτω. Για[3,7,7,9,8]. Αφαίρεση (7), ο πρώτος7 θα αφαιρεθεί, με αποτέλεσμα τη λίστα[3,7,9,8]. Αυτή η λειτουργία μπορεί επίσης να επιβραδύνει για μια μεγάλη λίστα, καθώς θεωρητικά πρέπει να διασχίσει ολόκληρη τη λίστα για να λειτουργήσει.

Τεμαχισμός λίστας Python

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

Παρατηρήσατε παραπάνω πώς να χρησιμοποιήσετε τη σημείωση αγκύλης για να λάβετε ένα μεμονωμένο στοιχείο από μια λίστα: my_list [2], για παράδειγμα. Οι φέτες χρησιμοποιούν μια παραλλαγή της ίδιας σημείωσης ευρετηρίου (και ακολουθώντας τους ίδιους κανόνες ευρετηρίου): list_object [έναρξη: διακοπή: βήμα].

  • αρχή είναι η θέση στη λίστα για να ξεκινήσετε το slice.
  • να σταματήσει είναι η θέση στη λίστα όπου σταματάμε να τεμαχίζουμε. Με άλλα λόγια,αυτή τη θέση και τα πάντα μετά από αυτήν παραλείπεται.
  • βήμα είναι μια προαιρετική ένδειξη «κάθε ένατο στοιχείο» για το slice. Από προεπιλογή, αυτό είναι1, έτσι το slice διατηρεί κάθε στοιχείο από τη λίστα από την οποία κοπεί. Σειρά βήμα προς την2και θα επιλέξετε κάθε δεύτερο στοιχείο και ούτω καθεξής.

Να μερικά παραδείγματα. Εξετάστε αυτήν τη λίστα:

slice_list = [1,2,3,4,5,6,7,8,9,0]

slice_list [0: 5] = [1, 2, 3, 4, 5]

(Σημειώστε ότι σταματάμε στο ευρετήριο 4 και όχι στο ευρετήριο 5!)

slice_list [0: 5: 2] = [1, 3, 5]

Εάν παραλείψετε ένα συγκεκριμένο δείκτη slice, η Python αναλαμβάνει την προεπιλογή. Αφήστε το δείκτη εκκίνησης και ο Python αναλαμβάνει την αρχή της λίστας:

slice_list [: 5] = [1, 2, 3, 4, 5]

Αφήστε το δείκτη διακοπής και ο Python αναλαμβάνει το τέλος της λίστας:

slice_list [4:] = [5, 6, 7, 8, 9, 0]

οβήμα στοιχείο μπορεί επίσης να είναιαρνητικός. Αυτό μας επιτρέπει να πάρουμε φέτες που είναι αντίστροφα αντίγραφα του πρωτοτύπου:

slice_list [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Σημειώστε ότι μπορείτε να κόψετε το αντίστροφο χρησιμοποιώντας ευρετήρια έναρξης και διακοπής που πηγαίνουν προς τα πίσω και όχι προς τα εμπρός:

slice_list [5: 2: -1] = [6, 5, 4]

Λάβετε επίσης υπόψη σας ότι υπάρχουν φέτες λιστώναντίγραφα της αρχικής λίστας. Η αρχική λίστα παραμένει αμετάβλητη.

[Επίσης στις: Τα καλύτερα δωρεάν μαθήματα επιστήμης δεδομένων κατά την καραντίνα]

Ταξινόμηση λίστας Python

Η Python παρέχει δύο τρόπους ταξινόμησης λιστών: Μπορείτε να δημιουργήσετε μια νέα, ταξινομημένη λίστα από την παλιά ή μπορείτε να ταξινομήσετε μια υπάρχουσα λίστα στη θέση τους. Αυτές οι επιλογές έχουν διαφορετικές συμπεριφορές και διαφορετικά σενάρια χρήσης.

Για να δημιουργήσετε μια νέα, ταξινομημένη λίστα, χρησιμοποιήστε τοταξινομημένο () λειτουργία στην παλιά λίστα:

new_list = ταξινομημένο (old_list)

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

Εάν θέλετε να ταξινομήσετε μια λίστα αντίστροφα, περάστε τοΑΝΤΙΣΤΡΟΦΗ παράμετρος:

new_list = ταξινομημένο (old_list, reverse = True)

Ο άλλος τρόπος ταξινόμησης,στη θέση ταξινόμηση, εκτελεί τη λειτουργία ταξινόμησης απευθείας στην αρχική λίστα. Για να το κάνετε αυτό, χρησιμοποιήστε τη λίστα.είδος()μέθοδος:

old_list.sort ()

.είδος() παίρνει επίσηςΑΝΤΙΣΤΡΟΦΗ ως παράμετρος, επιτρέποντάς σας να ταξινομήσετε αντίστροφα.

Και τα δυοταξινομημένο () και.είδος() πάρτε επίσης ένακλειδί παράμετρος. ο κλειδί Η παράμετρος σας επιτρέπει να παρέχετε μια λειτουργία που μπορεί να χρησιμοποιηθεί για την εκτέλεση μιας προσαρμοσμένης λειτουργίας ταξινόμησης. Όταν ταξινομηθεί η λίστα, κάθε στοιχείο μεταφέρεται στοκλειδί συνάρτηση και η προκύπτουσα τιμή χρησιμοποιείται για ταξινόμηση. Για παράδειγμα, εάν είχαμε έναν συνδυασμό ακέραιων και χορδών, και θέλαμε να τα ταξινομήσουμε, θα μπορούσαμε να το χρησιμοποιήσουμεκλειδί σαν αυτό:

mix_list = [1, "2", 3, "4", None] def sort_mixed (item): try: return int (item) εκτός: return 0 sorted_list = sorted (mixed_list, key = sort_mixed) print (sorted_list)

Λάβετε υπόψη ότι αυτός ο κωδικός δεν θαμετατρέπω κάθε στοιχείο της λίστας σε ακέραιο! Αντίθετα, θα χρησιμοποιούσε τον ακέραιοαξία κάθε στοιχείου ως τιμή ταξινόμησης. Σημειώστε επίσης πώς χρησιμοποιούμε έναδοκιμάστε / εκτός μπλοκ για παγίδευση οποιωνδήποτε τιμών που δεν μεταφράζονται καθαρά σε ακέραιο και επιστροφή0 από προεπιλογή.

Οι λίστες Python δεν είναι πίνακες

Ένα σημαντικό πράγμα που πρέπει να γνωρίζετε για τις λίστες στο Python είναι ότι δεν είναι "πίνακες". Άλλες γλώσσες, όπως το C, έχουν μονοδιάστατες ή πολυδιάστατες κατασκευές που ονομάζονται πίνακες που δέχονται τιμές ενός μόνο τύπου. Οι λίστες είναι ετερογενείς. μπορούν να δεχτούν αντικείμενα οποιουδήποτε τύπου.

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

Πότε να χρησιμοποιήσετε λίστες Python (και πότε όχι)

Λοιπόν, πότε είναι οι λίστες Python πιο χρήσιμες; Μια λίστα είναι καλύτερη όταν:

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

Μια λίστα Python είναι λιγότερο κατάλληλη όταν:

  • Θέλετε να βρείτε ένα στοιχείο σε μια λίστα, αλλά δεν γνωρίζετε τη θέση του. Εσείςμπορώ κάντε το με το.δείκτης() ιδιοκτησία. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετεlist_of_ints.index (1) για να βρείτε το ευρετήριο της πρώτης εμφάνισης του αριθμού1 σεlist_of_ints. Η ταχύτητα δεν πρέπει να αποτελεί πρόβλημα εάν η λίστα σας έχει λίγα μόνο αντικείμενα, αλλά για λίστες χιλιάδων αντικειμένων, αυτό σημαίνει ότι η Python πρέπει να πραγματοποιήσει αναζήτηση σε ολόκληρη τη λίστα. Για ένα σενάριο σαν αυτό, χρησιμοποιήστε ένα λεξικό, όπου κάθε στοιχείο μπορεί να βρεθεί χρησιμοποιώντας ένα κλειδί και όπου ο χρόνος αναζήτησης θα είναι ο ίδιος για κάθε τιμή.
  • Θέλετε να προσθέσετε ή να αφαιρέσετε στοιχεία από οποιαδήποτε θέση εκτός από το τέλος. Κάθε φορά που το κάνετε αυτό, η Python πρέπει να κινείταιμετά από κάθε άλλο αντικείμενοτο αντικείμενο που προστέθηκε ή καταργήθηκε. Όσο μεγαλύτερη είναι η λίστα, τόσο μεγαλύτερο είναι το ζήτημα απόδοσης. Python'sντεκ το αντικείμενο είναι πιο κατάλληλο αν θέλετε να προσθέσετε ή να αφαιρέσετε αντικείμενα ελεύθερα είτε από την αρχή είτε από το τέλος της λίστας.

Πώς να κάνετε περισσότερα με την Python

  • Τρόπος συσκευασίας εφαρμογών Python με BeeWare Briefcase
  • Πώς να τρέξετε το Anaconda δίπλα-δίπλα με άλλους Pythons
  • Πώς να χρησιμοποιήσετε γυαλιά ηλίου Python
  • Ξεκινήστε με το async στο Python
  • Πώς να χρησιμοποιήσετε το asyncio στο Python
  • 3 βήματα για μια αναθεώρηση ασύγχρονου Python
  • Πώς να χρησιμοποιήσετε το PyInstaller για να δημιουργήσετε εκτελέσιμα Python
  • Εκμάθηση Cython: Πώς να επιταχύνετε το Python
  • Πώς να εγκαταστήσετε το Python με τον έξυπνο τρόπο
  • Πώς να διαχειριστείτε τα έργα Python με το Poetry
  • Πώς να διαχειριστείτε τα έργα Python με το Pipenv
  • Virtualenv και venv: Εξηγήθηκαν εικονικά περιβάλλοντα Python
  • Το Python virtualenv και το venv κάνουν και δεν πρέπει
  • Η εξήγηση και οι υποεπεξεργασίες Python εξηγούνται
  • Πώς να χρησιμοποιήσετε το πρόγραμμα εντοπισμού σφαλμάτων Python
  • Πώς να χρησιμοποιήσετε το χρονοδιάγραμμα για τον προφίλ κώδικα Python
  • Πώς να χρησιμοποιήσετε το cProfile για να προβάλετε τον κώδικα Python
  • Πώς να μετατρέψετε το Python σε JavaScript (και να επιστρέψετε ξανά)