Κατανόηση της ταξινομημένης συνάρτησης στην Python: Ένας απλός οδηγός
Ένα από τα μεγάλα προνόμια της χρήσης Python είναι η απλότητά του. Είναι εύκολο να δουλέψετε μαζί του επειδή η τυπική βιβλιοθήκη του έχει πολλές χρήσιμες λειτουργίες. Μια τέτοια συνάρτηση είναι η συνάρτηση ταξινόμησης.
Αυτή η συνάρτηση χρησιμοποιείται για την ταξινόμηση επαναλήψεων με κάποια σειρά. Χωρίς μια τέτοια συνάρτηση, πρέπει να γράψετε κώδικα που να υλοποιεί έναν αλγόριθμο ταξινόμησης, όπως τα Bubble Sort ή Insertion Sort. Αυτό είναι συχνά δύσκολο, αλλά η Python παρέχει έναν απλούστερο τρόπο, τον οποίο θα καλύψουμε σε αυτό το άρθρο.
Πίνακας περιεχομένων
Εισαγωγή στη συνάρτηση ταξινόμησης
Η ταξινομημένη συνάρτηση είναι μια συνάρτηση που ταξινομεί επαναληπτικούς αριθμούς στην Python. Επαναλαμβανόμενο είναι οποιαδήποτε τιμή που μπορείτε να κάνετε επαναφορά. Παραδείγματα επαναλήψεων περιλαμβάνουν συμβολοσειρές, λίστες, πλειάδες και σύνολα. Αυτοί οι επαναληπτικοί είναι συχνά μη ταξινομημένοι και η ταξινόμηση βάζει τις τιμές τους σε κάποια καθορισμένη σειρά. Η παραγγελία τιμών είναι χρήσιμη επειδή:
- Η αναζήτηση με τιμές είναι ταχύτερη και πιο αποτελεσματική χρησιμοποιώντας αλγόριθμους όπως η δυαδική αναζήτηση. Ωστόσο, η δυαδική αναζήτηση απαιτεί πρώτα την ταξινόμηση των τιμών.
- Για εμφάνιση τιμών. Κατά καιρούς οι χρήστες θα ήθελαν να δουν ταξινομημένες πληροφορίες, για παράδειγμα, πρώτα τη χαμηλότερη τιμή ή πρώτα την πιο πρόσφατη ανάρτηση. Αυτό θα απαιτούσε την εφαρμογή κάποιου τρόπου ταξινόμησης μιας λίστας τιμών.
- Κατά την εκτέλεση στατιστικής ανάλυσης, για παράδειγμα, εύρεση της τιμής που εμφανίζεται πιο συχνά σε ένα σύνολο. Είναι πιο εύκολο να το κάνετε αυτό όταν οι τιμές ταξινομηθούν με τη σειρά.
Οδηγός χρήσης ταξινομημένης λειτουργίας
Όπως αναφέρθηκε προηγουμένως, η συνάρτηση ταξινόμησης λειτουργεί με όλους τους επαναληπτικούς. Με τη σειρά του, επιστρέφει μια λίστα που έχει ταξινομηθεί. Αυτό είναι σημαντικό να σημειωθεί – ενώ η είσοδος μπορεί να είναι οποιαδήποτε επαναλαμβανόμενη, η επιστρεφόμενη τιμή πρέπει πάντα να είναι μια λίστα.
Σύνταξη ταξινομημένης συνάρτησης
Η υπογραφή συνάρτησης της ταξινομημένης συνάρτησης είναι η εξής:
sorted(iterable, key=None, reverse=False)
Όπως μπορείτε να δείτε, το μόνο απαιτούμενο όρισμα είναι το iterable, το οποίο θα ταξινομηθεί.
Το ακόλουθο επιχείρημα είναι το κλειδί. Το κλειδί είναι μια συνάρτηση που θα χρησιμοποιηθεί για τη μετατροπή κάθε στοιχείου στον επαναληπτικό για να ληφθεί μια τιμή που θα χρησιμοποιηθεί για ταξινόμηση. Αυτό θα είναι χρήσιμο για την ταξινόμηση μιας λίστας λεξικών, όπως θα δείτε αργότερα. Η προεπιλεγμένη τιμή δεν είναι καμία, επομένως δεν θα εφαρμόσει καμία συνάρτηση εκτός εάν έχει καθοριστεί.
Το τελευταίο όρισμα είναι το αντίστροφο όρισμα. Όταν οριστεί σε true, τα στοιχεία θα ταξινομηθούν με αντίστροφη σειρά.
Στην επόμενη ενότητα, θα χρησιμοποιήσω παραδείγματα για να δείξω πώς να χρησιμοποιήσετε τη συνάρτηση.
Ταξινομημένα παραδείγματα χρήσης συναρτήσεων
Κατάλογος αριθμών
Η απλούστερη περίπτωση ταξινόμησης τιμών είναι η ταξινόμηση μιας λίστας αριθμών. Εξετάστε το ακόλουθο παράδειγμα κώδικα:
# A list of unsorted values numbers = [8, 4, 3, 9, 2, 0, 3] # Sorting the numbers sorted_numbers = sorted(numbers) # Outputting the sorted values print(sorted_numbers)
Η έξοδος θα ήταν:
[0, 2, 3, 3, 4, 8, 9]
Όπως μπορείτε να δείτε, οι τιμές έχουν ταξινομηθεί με αύξουσα σειρά. Θα ρυθμίσετε το αντίστροφο σε true αν θέλατε να τα ταξινομήσετε με φθίνουσα σειρά. Επομένως, η γραμμή 4 στο προηγούμενο παράδειγμα κώδικα θα ήταν:
sorted_numbers = sorted(numbers, reverse=True)
Το αποτέλεσμα της εκτέλεσης του τροποποιημένου προγράμματος θα είναι:
[9, 8, 4, 3, 3, 2, 0]
Λίστα χορδών
Η ταξινομημένη συνάρτηση υποστηρίζει περισσότερα από αριθμούς. Μπορείτε επίσης να ταξινομήσετε συμβολοσειρές. Για να ταξινομήσετε τις συμβολοσειρές σε μια λίστα, συγκρίνονται οι πρώτοι χαρακτήρες των συμβολοσειρών. Οι συγκρίσεις πραγματοποιούνται στις τιμές ASCII των χαρακτήρων. Για παράδειγμα, το ‘γεια’ θα προηγείται της λέξης ‘world’ επειδή η τιμή ASCII του ‘h’ είναι 104, μικρότερη από την τιμή ASCII του ‘w’, 119.
Εάν μία ή περισσότερες συμβολοσειρές έχουν τον ίδιο πρώτο χαρακτήρα, ο δεύτερος και οι επόμενοι χαρακτήρες τους συγκρίνονται μέχρι να βρεθεί κάποια σειρά. Ακολουθεί ένα παράδειγμα κώδικα όπου ταξινομούμε τα ονόματα των ατόμων.
# Creating a list of names members_list = ['bob', 'dave', 'charlie', 'alice'] # Sorting the names sorted_members_list = sorted(members_list) # Printing the names print(sorted_members_list)
Αυτό θα παράγει την ακόλουθη έξοδο:
['alice', 'bob', 'charlie', 'dave']
Επειδή χρησιμοποιούνται τιμές ASCII, η σειρά των συμβολοσειρών εξαρτάται από το ποιος χαρακτήρας έρχεται πρώτος στον πίνακα ASCII. Για παράδειγμα, ένας κεφαλαίος χαρακτήρας θα μπαίνει πριν από έναν πεζό, επειδή οι κεφαλαίοι χαρακτήρες μπαίνουν πριν από τα πεζά γράμματα στο ASCII. Ακολουθεί ένας πλήρης πίνακας ASCII για την αναφορά σας:
Πηγή: commons.wikimedia.org
Άλλα επαναληπτικά – Χορδές, πλειάδες και σύνολα
Όπως ανέφερα, η συνάρτηση ταξινόμησης λειτουργεί με όλα τα είδη των επαναλήψεων. Οι ίδιοι κανόνες ισχύουν για τον τρόπο ταξινόμησης των τιμών στους επαναληπτικούς. Εδώ είναι ένα παράδειγμα:
# Printing a sorted string print(sorted("dijkstra")) # Printing a sorted tuple of values print(sorted((3, 4, 2, 1, 5, 0))) # Printing a sorted set of values print(sorted(set([4, 5, 5, 1, 3, 8, 9])))
Το αποτέλεσμα αυτού θα είναι:
['a', 'd', 'i', 'j', 'k', 'r', 's', 't'] [0, 1, 2, 3, 4, 5] [1, 3, 4, 5, 8, 9]
Όπως μπορείτε να δείτε, η έξοδος σε κάθε περίπτωση είναι μια λίστα.
Κατάλογος λεξικών
Μπορείτε επίσης να εφαρμόσετε τη συνάρτηση ταξινόμησης για να ταξινομήσετε μια λίστα λεξικών. Ωστόσο, η ταξινόμηση των λεξικών είναι λίγο πιο περίπλοκη. Αυτό συμβαίνει επειδή, σε αντίθεση με τους αριθμούς ή τις συμβολοσειρές, ένα λεξικό έχει πολλαπλές ιδιότητες, καθεμία εξίσου έγκυρη για σύγκριση.
Έτσι, για να ταξινομήσετε τα λεξικά, καθορίζετε μια συνάρτηση που θα συνοψίζει ολόκληρο το λεξικό σε μία τιμή που θα χρησιμοποιηθεί για σύγκριση. Αυτή η συνάρτηση θα μεταβιβαστεί στη ταξινομημένη συνάρτηση ως όρισμα κλειδιού. Ακολουθεί ένα παράδειγμα προς επεξήγηση:
people = [ { 'name': 'Alice', 'age': 27 }, { 'name': 'Bob', 'age': 23 }, { 'name': 'Charlie', 'age': 25} ] people_sorted_by_age = sorted(people, key=lambda person: person['age']) print(people_sorted_by_age)
Σε αυτό το παράδειγμα, έχουμε τρία άτομα που αντιπροσωπεύονται από ένα αντικείμενο λεξικού. Κάθε αντικείμενο έχει ένα χαρακτηριστικό όνομα και ηλικία. Θέλουμε να ταξινομήσουμε τους ανθρώπους ανά ηλικία. Επομένως, όταν καλούμε την ταξινομημένη συνάρτηση, μεταβιβάζουμε μια συνάρτηση ως όρισμα κλειδιού.
Αυτή η λειτουργία θα λάβει το αντικείμενο του λεξικού ενός ατόμου και θα επιστρέψει την ηλικία του ατόμου. Η επιστρεφόμενη τιμή αυτού του κλειδιού θα χρησιμοποιηθεί για ταξινόμηση. Επομένως ολόκληρο το λεξικό έχει συνοψιστεί σε έναν απλό ακέραιο που μπορεί να συγκριθεί. Για απλότητα, χρησιμοποίησα μια συνάρτηση λάμδα για να ορίσω το όρισμα κλειδιού.
Η εκτέλεση του κώδικα θα παράγει την ακόλουθη έξοδο:
[{'name': 'Bob', 'age': 23}, {'name': 'Charlie', 'age': 25}, {'name': 'Alice', 'age': 27}]
Περίπτωση χρήσης βασικού επιχειρήματος
Το όρισμα κλειδιού δεν χρειάζεται να χρησιμοποιείται μόνο κατά την ταξινόμηση λεξικών. Μπορείτε να το χρησιμοποιήσετε σε όλες τις τιμές. Η χρήση του είναι να παρέχει ένα κλειδί που μπορεί να χρησιμοποιηθεί για την ταξινόμηση τιμών. Ακολουθούν παραδείγματα περιπτώσεων χρήσης:
- Ταξινόμηση τιμών μέσω του καθορισμού μιας συνάρτησης κλειδιού που λαμβάνει την τιμή και επιστρέφει το μήκος της τιμής.
- Ταξινόμηση συμβολοσειρών σε μια λίστα με τρόπο χωρίς διάκριση πεζών-κεφαλαίων. Για να γίνει αυτό, κάθε συμβολοσειρά στη λίστα μπορεί να μετατραπεί σε πεζά. Αυτό μπορεί να επιτευχθεί ορίζοντας μια συνάρτηση κλειδιού που παίρνει την τιμή κλειδιού μιας συμβολοσειράς και επιστρέφει μια πεζή έκδοση της συμβολοσειράς.
- Ταξινόμηση τιμών με βάση μια σύνθετη τιμή που συνδυάζει τις τιμές άλλων καταχωρήσεων.
Πολυπλοκότητα χρόνου εκτέλεσης της ταξινομημένης συνάρτησης
Η ταξινομημένη συνάρτηση έχει πολυπλοκότητα χρόνου εκτέλεσης O(n log n), όπου n είναι ο αριθμός των στοιχείων στο επαναληπτικό στοιχείο εισόδου. Αυτή η πολυπλοκότητα προκύπτει επειδή η συνάρτηση χρησιμοποιεί τον αλγόριθμο Timsort, ο οποίος είναι ένας υβριδικός αλγόριθμος ταξινόμησης που βασίζεται στη συγχώνευση ταξινόμησης και ταξινόμησης εισαγωγής.
Η πολυπλοκότητα χώρου της συνάρτησης είναι O(n), όπου n εξακολουθεί να είναι ο αριθμός των στοιχείων στην είσοδο. Αυτό συμβαίνει επειδή δημιουργείται και επιστρέφεται μια νέα λίστα.
Συνάρτηση ταξινόμησης έναντι συνάρτησης ταξινόμησης
Μια άλλη επιλογή για ταξινόμηση τιμών είναι η συνάρτηση ταξινόμησης. Αυτή η ενότητα θα εξηγήσει τις βασικές διαφορές μεταξύ των συναρτήσεων ταξινόμησης και ταξινόμησης.
- Η συνάρτηση ταξινόμησης τροποποιεί τον επαναληπτικό στη θέση του, ενώ η ταξινομημένη συνάρτηση δημιουργεί μια νέα λίστα και την επιστρέφει.
- Επειδή οι τροποποιήσεις πραγματοποιούνται επί τόπου, η ταξινόμηση απαιτεί η εισαγωγή να είναι μια λίστα. Από την άλλη πλευρά, το sorted μπορεί να λάβει οποιοδήποτε επαναληπτικό ως είσοδο το οποίο στη συνέχεια θα χρησιμοποιηθεί για τη δημιουργία μιας νέας λίστας που θα τροποποιηθεί και θα επιστραφεί.
Τελικές Λέξεις
Σε αυτό το άρθρο, καλύψαμε τη συνάρτηση ταξινόμησης – τι είναι, πώς να τη χρησιμοποιήσετε και τα διαφορετικά ορίσματα που χρησιμοποιεί. Καλύψαμε επίσης διαφορετικά παραδείγματα χρήσης της συνάρτησης και την πολυπλοκότητα του χρόνου εκτέλεσης και τη συγκρίναμε με τη συνάρτηση ταξινόμησης.
Στη συνέχεια, μπορεί να θέλετε να διαβάσετε το άρθρο μας σχετικά με τη συνάρτηση αθροίσματος της Python.