Περισσότερα
Κατανόηση της σημειολογίας φέτες
Χρειάζομαι μια καλή εξήγηση (οι αναφορές είναι ένα συν) σχετικά με τη σημειογραφία φέτα της Python's.
Για μένα, αυτός ο συμβολισμός χρειάζεται λίγο μάζεμα.
Φαίνεται εξαιρετικά ισχυρή, αλλά δεν την έχω καταλάβει.
2992
3
Είναι πραγματικά πολύ απλό:
Υπάρχει επίσης η τιμή
step
, η οποία μπορεί να χρησιμοποιηθεί με οποιοδήποτε από τα παραπάνω:Το βασικό σημείο που πρέπει να θυμάστε είναι ότι η τιμή
:stop
αντιπροσωπεύει την πρώτη τιμή που δεν βρίσκεται στην επιλεγμένη φέτα. Έτσι, η διαφορά μεταξύstop
καιstart
είναι ο αριθμός των στοιχείων που επιλέγονται (αν τοstep
είναι 1, η προεπιλογή).Το άλλο χαρακτηριστικό είναι ότι το
start
ή τοstop
μπορεί να είναι ένας αρνητικός αριθμός, που σημαίνει ότι μετράει από το τέλος του πίνακα αντί για την αρχή. Έτσι:Ομοίως, το
step
μπορεί να είναι αρνητικός αριθμός:Η Python είναι ευγενική με τον προγραμματιστή αν υπάρχουν λιγότερα στοιχεία από αυτά που ζητάτε. Για παράδειγμα, αν ζητήσετε
a[:-2]
και τοa
περιέχει μόνο ένα στοιχείο, θα πάρετε μια κενή λίστα αντί για σφάλμα. Μερικές φορές θα προτιμούσατε το σφάλμα, οπότε πρέπει να γνωρίζετε ότι αυτό μπορεί να συμβεί.Σχέση με το αντικείμενο
slice()
Ο τελεστής τεμαχισμού
[]
στην πραγματικότητα χρησιμοποιείται στον παραπάνω κώδικα με ένα αντικείμενοslice()
χρησιμοποιώντας τον συμβολισμό:
(ο οποίος είναι έγκυρος μόνο μέσα στο[]
), δηλ:ισοδυναμεί με:
Τα αντικείμενα Slice συμπεριφέρονται επίσης ελαφρώς διαφορετικά ανάλογα με τον αριθμό των ορίων, παρόμοια με την
range()
, δηλαδή υποστηρίζονται τόσο ηslice(stop)
όσο και ηslice(start, stop[, step])
. Για να παραλείψετε τον προσδιορισμό ενός συγκεκριμένου ορίσματος, θα μπορούσατε να χρησιμοποιήσετε τοNone
, έτσι ώστε π.χ. τοa[start:]
να είναι ισοδύναμο με τοa[slice(start, None)]
ή τοa[::-1]
να είναι ισοδύναμο με τοa[slice(None, None, -1)]
.Ενώ η σημειογραφία με βάση το
:
είναι πολύ χρήσιμη για απλές φέτες, η ρητή χρήση αντικειμένωνslice()
απλοποιεί την προγραμματιστική παραγωγή φέτες.Το σεμινάριο Python μιλάει γι' αυτό (μετακινηθείτε λίγο προς τα κάτω μέχρι να φτάσετε στο σημείο που αναφέρεται στο slicing).
Το διάγραμμα ASCII art είναι επίσης χρήσιμο για να θυμάστε πώς λειτουργούν οι φέτες:
Απαρίθμηση των δυνατοτήτων που επιτρέπει η γραμματική:
Φυσικά, αν
(high-low)%stride != 0
, τότε το τελικό σημείο θα είναι λίγο πιο χαμηλά από τοhigh-1
.Αν το
stride
είναι αρνητικό, η σειρά αλλάζει λίγο, αφού μετράμε προς τα κάτω:Οι εκτεταμένες τεμαχισμοί (με κόμματα και ελλείψεις) χρησιμοποιούνται κυρίως μόνο από ειδικές δομές δεδομένων (όπως η NumPy)- οι βασικές ακολουθίες δεν τις υποστηρίζουν.