3.8 Ταξινομήση στοιχείων σε λίστα

Στην Python, υπάρχουν δύο βασικοί τρόποι για να ταξινομήσετε μια λίστα: η μέθοδος sort() και η ενσωματωμένη συνάρτηση sorted().

Η μέθοδος sort() ταξινομεί απευθείας τη λίστα πάνω στην οποία εκτελείται, χωρίς να δημιουργεί νέα λίστα. Η ταξινόμηση γίνεται σε αύξουσα σειρά (ή φθίνουσα σειρά, αν περάσετε την παράμετρο reverse=True). Η μέθοδος sort() επηρεάζει άμεσα τη λίστα και δεν επιστρέφει κάποια τιμή.

Αντίθετα, η συνάρτηση sorted() επιστρέφει μια νέα ταξινομημένη λίστα, αφήνοντας την αρχική λίστα ανέπαφη. Μπορείτε να αποθηκεύσετε την επιστρεφόμενη τιμή σε μια μεταβλητή. Η sorted() μπορεί να χρησιμοποιηθεί είτε για να ταξινομήσει τη λίστα σε αύξουσα σειρά (προεπιλογή) είτε για να την ταξινομήσει σε φθίνουσα σειρά (χρησιμοποιώντας την παράμετρο reverse=True).

Παραδείγματα κώδικα:

fruits = ["apple", "banana", "cherry"]

# Χρήση της μεθόδου sort()
fruits.sort()
print(fruits)  # Εκτύπωση: ['apple', 'banana', 'cherry']

# Χρήση της ενσωματωμένης συνάρτησης sorted()
sorted_fruits = sorted(fruits)
print(sorted_fruits)  # Εκτύπωση: ['apple', 'banana', 'cherry']

Και οι δύο προσεγγίσεις θα παράξουν την ίδια ταξινομημένη λίστα ['apple', 'banana', 'cherry']. Η διαφορά είναι ότι η μέθοδος sort() ταξινομεί την αρχική λίστα fruits, ενώ η συνάρτηση sorted() επιστρέφει μια νέα ταξινομημένη λίστα.

Η μέθοδος sort() ταξινομεί τα στοιχεία μιας λίστας σε αύξουσα σειρά εξ’ ορισμού, και τροποποιεί τη λίστα επί τόπου (δηλαδή, η αρχική λίστα αλλάζει).

numbers = [34, 1, 12, 67, 5]
numbers.sort()  # Ταξινομεί τη λίστα numbers σε αύξουσα σειρά
print(numbers)  # Εκτύπωση της ταξινομημένης λίστας

Με την μέθοδο sort(), η αρχική λίστα numbers ταξινομείται σε αύξουσα σειρά και αυτή η ταξινομημένη λίστα εκτυπώνεται. Στην περίπτωση μας, η λίστα numbers ταξινομείται σε [1, 5, 12, 34, 67].

Για να ταξινομήσετε τη λίστα σε φθίνουσα σειρά, χρησιμοποιήστε το όρισμα reverse=True:

numbers = [34, 1, 12, 67, 5]
numbers.sort(reverse=True)
print(numbers)  # Εκτυπώνει [67, 34, 12, 5, 1]

Ο κώδικας δημιουργεί μια λίστα με τις τιμές [34, 1, 12, 67, 5]. Χρησιμοποιώντας τη μέθοδο sort() με την παράμετρο reverse=True, η λίστα ταξινομείται σε φθίνουσα σειρά. Το αποτέλεσμα εκτυπώνεται ως [67, 34, 12, 5, 1].

Η συνάρτηση sorted() επίσης ταξινομεί τα στοιχεία μιας λίστας σε αύξουσα σειρά εξ’ ορισμού, αλλά δημιουργεί μια νέα λίστα χωρίς να τροποποιήσει την αρχική λίστα.

numbers = [34, 1, 12, 67, 5]

# Χρήση της ενσωματωμένης συνάρτησης sorted()
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # Εκτύπωση: [1, 5, 12, 34, 67]

# Η αρχική λίστα παραμένει αμετάβλητη
print(numbers)  # Εκτύπωση: [34, 1, 12, 67, 5]

Ο κώδικας παραπάνω δημιουργεί μια λίστα numbers με αριθμούς. Χρησιμοποιώντας τη συνάρτηση sorted(), δημιουργείται μια νέα ταξινομημένη λίστα sorted_numbers. Η εκτύπωση της sorted_numbers θα επιστρέψει τη λίστα με τους αριθμούς ταξινομημένους σε αύξουσα σειρά: [1, 5, 12, 34, 67].

Ωστόσο, η αρχική λίστα numbers παραμένει αμετάβλητη. Η εκτύπωση της numbers θα επιστρέψει την αρχική λίστα με την αρχική σειρά των αριθμών: [34, 1, 12, 67, 5].

Για να ταξινομήσετε τη λίστα σε φθίνουσα σειρά, χρησιμοποιήστε το όρισμα reverse=True:

numbers = [34, 1, 12, 67, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)  # Εκτυπώνει '[67, 34, 12, 5, 1]'
print(numbers)  # Εκτυπώνει '[34, 1, 12, 67, 5]' (η αρχική λίστα παραμένει αμετάβλητη)

Σε αυτόν τον κώδικα, δημιουργείται μια νέα ταξινομημένη λίστα sorted_numbers με τη χρήση της συνάρτησης sorted(), παρέχοντας τη λίστα numbers ως είσοδο. Η παράμετρος reverse=True χρησιμοποιείται για να εκτελείται η ταξινόμηση σε φθίνουσα σειρά. Το αποτέλεσμα αποθηκεύεται στη μεταβλητή sorted_numbers.

Στη συνέχεια, εκτυπώνονται η ταξινομημένη λίστα sorted_numbers, που θα είναι [67, 34, 12, 5, 1], καθώς και η αρχική λίστα numbers, η οποία παραμένει αμετάβλητη και εκτυπώνεται ως [34, 1, 12, 67, 5].

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

words = ["apple", "banana", "cherry", "orange"]

# Χρήση της συνάρτησης sorted() με την παράμετρο key=len
sorted_words = sorted(words, key=len)

print(sorted_words)  # Εκτύπωση: ['apple', 'cherry', 'banana', 'orange']

Στον παραπάνω κώδικα, χρησιμοποιούμε τη συνάρτηση sorted() για να ταξινομήσουμε τη λίστα words με βάση το μήκος των στοιχείων. Η παράμετρος key=len καθορίζει ότι η ταξινόμηση θα γίνει βάσει του μήκους των στοιχείων. Έτσι, η λίστα sorted_words θα περιέχει τις λέξεις ταξινομημένες με αύξουσα σειρά μήκους.

Η εκτύπωση print(sorted_words) θα εμφανίσει ['apple', 'cherry', 'banana', 'orange'] στην οθόνη.

[adinserter block=”2″]

Συνοψίζοντας, στην Python μπορείτε να ταξινομήσετε μια λίστα χρησιμοποιώντας τη μέθοδο sort() ή την ενσωματωμένη συνάρτηση sorted(). Οι δύο αυτές μέθοδοι παρέχουν τη δυνατότητα ταξινόμησης, αλλά έχουν διαφορετική συμπεριφορά.

  • Η μέθοδος sort() τροποποιεί την αρχική λίστα επί τόπου, ταξινομώντας τα στοιχεία της. Δεν επιστρέφει κάποια νέα λίστα, αλλά ταξινομεί τα στοιχεία απευθείας στην αρχική λίστα.
  • Η συνάρτηση sorted() δημιουργεί μια νέα ταξινομημένη λίστα, χωρίς να αλλάξει την αρχική λίστα. Επιστρέφει μια νέα λίστα που περιέχει τα στοιχεία της αρχικής λίστας ταξινομημένα. Αυτή η συνάρτηση είναι χρήσιμη όταν θέλετε να διατηρήσετε την αρχική σειρά των στοιχείων, ενώ ταξινομείτε την κατάσταση αντιγράφου.

Επιπλέον, μπορείτε να καθορίσετε προσαρμοσμένα κριτήρια ταξινόμησης χρησιμοποιώντας το όρισμα key. Αυτό το όρισμα παίρνει μια συνάρτηση που καθορίζει τον τρόπο σύγκρισης των στοιχείων της λίστας. Μπορείτε να χρησιμοποιήσετε μια ενσωματωμένη συνάρτηση, όπως η len(), ή να ορίσετε μια προσαρμοσμένη συνάρτηση που εκτελεί τη σύγκριση που επιθυμείτε.

Για παράδειγμα, στον κώδικα sorted_words = sorted(words, key=len), χρησιμοποιούμε την ενσωματωμένη συνάρτηση len() ως το key, οπότε οι λέξεις ταξινομούνται βάσει του μήκους τους. Αυτό σημαίνει ότι οι λέξεις θα εμφανίζονται στην ταξινομημένη λίστα sorted_words με αύξουσα σειρά μήκους.

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

Τέλος, καλό είναι να γνωρίζετε ότι μπορείτε να ταξινομήσετε όχι μόνο λίστες αλλά και άλλες δομές δεδομένων, όπως σύνολα (sets) και λεξικά (dictionaries), χρησιμοποιώντας την ενσωματωμένη συνάρτηση sorted(). Ωστόσο, η συμπεριφορά και τα αποτελέσματα της ταξινόμησης μπορεί να διαφέρουν ανάλογα με τον τύπο της δομής δεδομένων.

Για παράδειγμα, όταν ταξινομείτε ένα σύνολο (set), η συνάρτηση sorted() θα επιστρέψει μια λίστα με τα ταξινομημένα στοιχεία του συνόλου

my_set = {4, 2, 9, 1, 5}  # Δημιουργία ενός συνόλου με αρχικά στοιχεία
sorted_set = sorted(my_set)  # Ταξινόμηση του συνόλου και αποθήκευση των αποτελεσμάτων σε μια νέα λίστα
print(sorted_set)  # Εκτύπωση της ταξινομημένης λίστας

Στον παραπάνω κώδικα, δημιουργούμε ένα σύνολο my_set με αρχικά στοιχεία (4, 2, 9, 1, 5). Στη συνέχεια, χρησιμοποιούμε την ενσωματωμένη συνάρτηση sorted() για να ταξινομήσουμε το σύνολο και να δημιουργήσουμε μια νέα ταξινομημένη λίστα sorted_set. Τέλος, εκτυπώνουμε την sorted_set, η οποία θα περιέχει τα στοιχεία του αρχικού συνόλου ταξινομημένα σε αύξουσα σειρά: [1, 2, 4, 5, 9].

Όταν ταξινομείτε ένα λεξικό (dictionary), η συνάρτηση sorted() θα επιστρέψει μια λίστα με τα ταξινομημένα κλειδιά του λεξικού εξ’ ορισμού:

my_dict = {"one": 1, "three": 3, "four": 4, "two": 2}  # Δημιουργία ενός λεξικού με αρχικά ζευγάρια κλειδιού-τιμής
sorted_dict = sorted(my_dict)  # Ταξινόμηση των κλειδιών του λεξικού και αποθήκευση των αποτελεσμάτων σε μια νέα λίστα
print(sorted_dict)  # Εκτύπωση της ταξινομημένης λίστας με τα κλειδιά

[adinserter block=”3″]

Στον παραπάνω κώδικα, δημιουργούμε ένα λεξικό my_dict με αρχικά ζευγάρια κλειδιού-τιμής. Σημειώνεται ότι η ταξινόμηση εφαρμόζεται στα κλειδιά του λεξικού, όχι στις τιμές τους. Χρησιμοποιούμε την ενσωματωμένη συνάρτηση sorted() για να ταξινομήσουμε τα κλειδιά και να δημιουργήσουμε μια νέα ταξινομημένη λίστα sorted_dict. Τέλος, εκτυπώνουμε την sorted_dict, η οποία θα περιέχει τα κλειδιά του λεξικού ταξινομημένα σε αύξουσα σειρά βάσει της λεκτικής αξίας τους: ["four", "one", "three", "two"].

Ωστόσο, μπορείτε να ταξινομήσετε τα ζευγάρια κλειδιού-τιμής του λεξικού βάσει των τιμών, χρησιμοποιώντας μια λειτουργία λάμβδα ως όρισμα key:

my_dict = {"one": 1, "three": 3, "four": 4, "two": 2}  # Δημιουργία ενός λεξικού με αρχικά ζεύγη "κλειδί-τιμή"
sorted_dict_by_value = sorted(my_dict.items(), key=lambda item: item[1])  # Ταξινόμηση του λεξικού βάσει της τιμής (item[1])
print(sorted_dict_by_value)  # Εκτύπωση του ταξινομημένου λεξικού με βάση την τιμή των στοιχείων

Στον παραπάνω κώδικα, έχουμε ένα λεξικό my_dict με αρχικά ζεύγη “κλειδί-τιμή”. Χρησιμοποιούμε την συνάρτηση sorted() για να ταξινομήσουμε το λεξικό με βάση την τιμή των στοιχείων. Η sorted() δέχεται τη μέθοδο items() του λεξικού για να επιστρέψει μια λίστα με τα ζεύγη “κλειδί-τιμή”. Χρησιμοποιούμε την παράμετρο key με μια lambda συνάρτηση που επιστρέφει την δεύτερη συνιστώσα (item[1]) κάθε ζεύγους. Αυτό καθορίζει ότι η ταξινόμηση θα γίνει βάσει της τιμής των στοιχείων. Τέλος, εκτυπώνουμε τη λίστα sorted_dict_by_value, η οποία θα περιέχει τα ζεύγη “κλειδί-τιμή” του λεξικού ταξινομημένα βάσει της τιμής σε αύξουσα σειρά: [("one", 1), ("two", 2), ("three", 3), ("four", 4)].

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

Για παράδειγμα, ας υποθέσουμε ότι έχουμε μια λίστα ακεραίων:

my_list = [5, 1, 3, 2, 4]

Μπορούμε να ορίσουμε μια συνάρτηση που επιστρέφει τον αριθμό των διαιρέσεων κάθε στοιχείου με το 2:

def get_divisions(num):
    return num // 2

Και στη συνέχεια να χρησιμοποιήσουμε αυτήν τη συνάρτηση ως κλειδί στην sorted() για να ταξινομήσουμε τη λίστα:

sorted_list = sorted(my_list, key=get_divisions)
print(sorted_list)  # Εκτυπώνει '[1, 2, 3, 4, 5]'

Στο παραπάνω παράδειγμα, η λίστα my_list ταξινομείται βάσει του αριθμού των διαιρέσεων με το 2 για κάθε στοιχείο. Το αποτέλεσμα είναι η λίστα sorted_list που περιέχει τα στοιχεία [1, 2, 3, 4, 5], με τα στοιχεία που έχουν λιγότερες διαιρέσεις να τοποθετούνται πρώτα.

[adinserter block=”4″]

Εξ’ ορισμού η μέθοδος sort() είναι case sensitive, προτάσεις κεφαλαίων γραμμάτων ταξινομούνται πριν τις προτάσεις πεζών γραμμάτων. Αν θέλετε να εφαρμόσετε μια μη-case-sensitive ταξινόμηση, μπορείτε να χρησιμοποιήσετε το όρισμα key=str.lower. Αυτό το όρισμα θα εφαρμόσει τη μέθοδο lower() σε κάθε στοιχείο κατά τη διάρκεια της ταξινόμησης, μετατρέποντας όλα τα γράμματα σε πεζά πριν τη σύγκριση.

Ας υποθέσουμε ότι έχουμε την ακόλουθη λίστα με λέξεις:

my_list = ["Apple", "banana", "cherry", "apple", "Banana"]

Αν χρησιμοποιήσουμε απλά τη μέθοδο sort(), το αποτέλεσμα θα είναι:

my_list.sort()
print(my_list)  # Εκτυπώνει '["Apple", "Banana", "apple", "banana", "cherry"]'

Ωστόσο, αν χρησιμοποιήσουμε το όρισμα key=str.lower, η ταξινόμηση θα είναι μη-case-sensitive και το αποτέλεσμα θα είναι:

my_list.sort(key=str.lower)
print(my_list)  # Εκτυπώνει '["apple", "Apple", "banana", "Banana", "cherry"]'

Όπως μπορείτε να δείτε, τα γράμματα δεν λαμβάνονται υπόψη κατά την ταξινόμηση και τα αποτελέσματα είναι μη-case-sensitive.

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

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

my_list = [1, 2, 3, 4, 5]

Μπορούμε να εφαρμόσουμε τη μέθοδο reverse() σε αυτήν τη λίστα:

my_list.reverse()
print(my_list)  # Εκτυπώνει '[5, 4, 3, 2, 1]'

Το αποτέλεσμα είναι η λίστα my_list να αντιστραφεί, με τα στοιχεία να είναι τώρα [5, 4, 3, 2, 1].

9 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων