Σημειωματάριο Δευτέρας 13 Νοε. 2017

Σχετικά έγγραφα
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Σημειωματάριο Τετάρτης 11 Οκτ. 2017

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Σημειωματάριο Τετάρτης 29 Νοε. 2017

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Διορθώσεις σελ

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

Σημειωματάριο Τετάρτης 4 Οκτ. 2017

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Βασικά Στοιχεία Python 3

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Πρώτο Φύλλο Ασκήσεων

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

Διάλεξη 04: Παραδείγματα Ανάλυσης

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

Προγραμματιστικές Τεχνικές

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Ακολουθίες: Λίστες και Πλειάδες Χειμερινό Εξάμηνο 2016

Θέματα Προγραμματισμού Η/Υ

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Επαναληπτικές Ασκήσεις Χειµερινό Εξάµηνο 2014

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Διαδικασιακός Προγραμματισμός

Python 8. Δομές Δεδομένων ΙΙ

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

Διδάσκων: Παναγιώτης Ανδρέου

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Σημειωματάριο μαθήματος 1ης Νοε. 2017

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λίστες και Πλειάδες Χειµερινό Εξάµηνο 2014

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Γενικά. PDF created with pdffactory trial version

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Regular Expressions ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραμματισμός Η/Υ (ΤΛ2007 )

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Πληροφορική ΙΙ Ενότητα 1

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Επαναληπτικές Ασκήσεις

Κεφάλαιο 8: Προγραμματίζοντας αλγορίθμους έξυπνα και δημιουργικά

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Λίστες. Lista=[ red, green, blue ] Το πλήθος των στοιχείων μια λίστας δίνεται από τη συνάρτηση len(): Len(Lista)

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθμοι Ταξινόμησης Μέρος 1

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Σημειωματάριο Δευτέρας, 6 Νοε. 2017

Σημειωματάριο Δευτέρας 4 Δεκ. 2017

7η Σειρά Ασκήσεων. Μπορείτε, αν θέλετε, να χρησιμοποιήσετε τον τύπο string της ΗΡ Pascal και τις αντίστοιχες συναρτήσεις (κεφ 10.1 των σημειώσεων).

Χρησιμοποιώντας συναρτήσεις

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Επαναληπτικές Ασκήσεις Χειμερινό Εξάμηνο 2016

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστηριακή Άσκηση 1

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

1. Η χειρότερη περίπτωση είναι όταν γίνου 10 επαναλήψεις, δηλαδή για n = 0.

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΠΛ131 Αρχές Προγραμματισμού

ΚΕΦΑΛΑΙΟ 6. Συμβολοσειρές, λίστες, πλειάδες, λεξικά. 6.1 Εισαγωγή

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Παραδείγματα Προγραμματισμού σε Assembly του TRN

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Φροντιστήριο 2 ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Πληροφορική 2. Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι

Δείκτες & Πίνακες Δείκτες, Πίνακες

Κεφάλαιο 7: Συναρτήσεις

Transcript:

Σημειωματάριο Δευτέρας 13 Νοε. 2017 Bubble sort Εδώ δείχνουμε το πώς λειτουργεί μια πολύ απλή μέθοδος ταξινόμησης, η bubble sort. Έχουμε να ταξινομήσουμε μια λίστα L αριθμών σε αύξουσα σειρά. Ο τρόπος που το κάνουμε είναι ο εξής. Κάνουμε πολλαπλές συγκρίσεις ανάμεσα σε ζεύγη θέσεων της λίστας. Σε κάθε τέτοια σύγκριση αν τα περιεχόμενα των δύο θέσεων δεν είναι στη σωστή σειρά τότε εναλλάσουμε τα περιεχόμενά τους. Έχει βέβαια μεγάλη σημασία το με ποια σειρά κάνουμε τους ελέγχους αυτούς. Αν n είναι το μήκος της λίστας (θέσεις από 0 έως n-1) τότε κάνουμε τους παρακάτω ελέγχους ζευγών: (0, 1), (1, 2), (2, 3),..., (n-4, n-3), (n-3, n-2), (n-2, n-1), (0, 1), (1, 2), (2, 3),..., (n-4, n-3), (n-3, n-2), (0, 1), (1, 2), (2, 3),..., (n-4, n-3),... (0, 1), (1, 2), (2, 3), (0, 1), (1, 2), (0, 1) Η βασική παρατήρηση τώρα είναι ότι στο τέλος της πρώτης σειράς ελέγχων το μεγαλύτερο στοιχείο της L (ή ένα από τα μεγαλύτερα, αν έχει παραπάνω από ένα) έχει πάει στη θέση του, δηλ. στη θέση n-1. Μετά το τέλος της δεύτερης σειράς ελέγχων έχει πάει στη θέση του το δεύτερο μεγαλύτερο στοιχείο της L, δηλ. στη θέση n-2, κλπ. Έτσι μετά τον τελευταίο έλεγχο που γίνεται η λίστα είναι πλήρως ταξινομημένη σε αύξουσα σειρά. In [ ]: In [1]: def bubblesort(l): # Η συνάρτηση αυτή αναδιατάσσει τα στοιχεία της λίστας L ώστε να είναι σε αύ ξουσα σειρά # Αν κενή ή έχει μήκος 1 δεν έχουμε τίποτε να κάνουμε # Για σταθερό i υλοποιούμε τους ελέγχους/εναλλαγές μια ς γραμμής από τις παραπάνω (ένα πέρασμα) if L[i-1] > L[j]: # Αν τα i-1 και j στοιχεία της L δεν είναι στη σωσ τή σειρά τότε τα εναλλάσουμε bubblesort(x) # ταξινομούμε τη X σε αύξουσα σειρά [-10, -5, -1, 0, 0, 1, 3, 3.4, 4, 9]

Γεννιέται όμως η ανάγκη να ταξινομούμε και με άλλους τρόπους, π.χ. σε φθίνουσα σειρά, ή να ταξινομούμε αντικείμενα που ο τρόπος που είναι διατεταγμένα είτε δεν είναι προφανής είτε θέλουμε να τον αλλάξουμε. Γι' αυτό ξαναγράφουμε την bubblesort ώστε να παίρνει κι ένα δεύτερο όρισμα, μια συνάρτηση f. Η συνάρτηση αυτή f πρέπει να είναι έτσι φτιαγμένη ώστε να παίρνει ως όρισμα μια λίστα L και δύο θέσεις της λίστας i και j και να μας απαντάει αν οι τιμές της λίστας στις θέσεις αυτές είναι στη σωστή σειρά (True) ή όχι (False). Τώρα η bubblesort καλεί αυτή τη συνάρτηση για να αποφασίσει αν θα εναλλάξει τα περιεχόμενα δύο θέσεων της λίστας που ταξινομεί. Κι εμείς δίνουμε στην bubblesort την κατάλληλη τέτοια συνάρτηση που να συμβαδίζει με την έννοια διάταξης που θέλουμε να εφαρμόσουμε. In [2]: Αν θέλουμε να ταξινομήσουμε μια λίστα αριθμών σε φθίνουσα σειρά τότε φτιάχνουμε την παρακάτω συνάρτηση ελέγχου και την περνάμε στην bubblesort. In [4]: def compare(l, i, j): # Ελέγχει αν το L[i] και L[j] στοιχείο της L # είναι σε φθίνουσα σειρά L[i] >= L[j] L[j] >= L[i] bubblesort(x, compare) # ταξινομούμε τη X σε φθίνουσα σειρά [9, 4, 3.4, 3, 1, 0, 0, -1, -5, -10] Ενώ αν θέλουμε να ταξινομήσουμε με φθίνουσα σειρά της απόλυτης τιμής τότε χρησιμοποιούμε την παρακάτω συνάρτηση ελέγχου.

In [5]: def comp1(l, i, j): abs(l[i]) >= abs(l[j]) abs(l[j]) >= abs(l[i]) bubblesort(x, comp1) # ταξινομούμε τη X σε φθίνουσα σειρά της απολύτου τιμής [-10, 9, -5, 4, 3.4, 3, 1, -1, 0, 0] Αν θέλουμε να ταξινομήσουμε μια λίστα από strings αγνοώντας το αν τα γράμματα είναι κεφαλαία ή μικρά τότε το κάνουμε με την παρακάτω συνάρτηση. In [6]: def compares(l, i, j): L[i].lower() >= L[j].lower() L[j].lower() >= L[i].lower() X = ["abc", "A", "ABCD", "xyz", "Xyz", ""] bubblesort(x, compares) # ταξινομούμε την X σε φθίνουσα (λεξικογραφική) σειρά χω ρίς να λογαριάζουμε κεφαλαία ή μικρά ['xyz', 'Xyz', 'ABCD', 'abc', 'A', ''] Υπάρχουν και δύο έτοιμες συναρτήσεις/μέθοδοι της python για ταξινόμηση λίστας. Η συνάρτηση sorted(l) που μας επιστρέφει τη λίστα L ταξινομημένη (χωρίς να πειράζει την L) και η μέθοδος L.sort() η οποία ταξινομεί εσωτερικά τη λίστα L.

In [11]: print(sorted(x)) [3, 2, 2, 1, 1, -1] In [ ]: print(sorted(x, reverse=true)) # δίνοντας αυτή την παράμετρο η sorted ταξινομεί κατά φθίνουσα σειρά. In [7]: X.sort() [-1, 1, 1, 2, 2, 3] In [10]: X.sort(reverse=True) # δίνοντας αυτή την παράμετρο η sort ταξινομεί κατά φθίνουσ α σειρά. [3, 2, 2, 1, 1, -1] Αν πρόκειται να ταξινομήσουμε αντικείμενα που δεν έχουν προφανή τρόπο διάταξης (φανταστείτε π.χ. ότι τα αντικείμενά μας είναι τα άτομα μέσα σε μια αίθουσα, που για το καθένα από αυτά έχουμε την εξής πληροφορία: το όνομά τους, την ηλικία τους, το ύψος τους και το βάρος τους. Τότε υπάρχουν πάρα πολλοί διαφορετικοί τρόποι με τους οποίους θα μπορούσαμε να ζητήσουμε να ταξινομηθούν. Για να πούμε λοιπόν στην sort και την sorted πώς θέλουμε να ταξινομήσουμε τα αντικείμενα που είναι μέσα στη λίστα αυτό που κάνουμε είναι ότι φτιάχνουμε μια συνάρτηση (ίσως και να είναι ήδη έτοιμη στην python) η οποία σε κάθε αντικείμενο της λίστας μας αντιστοιχίζει έναν αριθμό (π.χ., στο προηγούμενο παράδειγμα, θα μπορούσαμε σε κάθε άτομο να αντιστοιχίσουμε το ύψος του) και με βάση αυτό τον αριθμό γίνεται η ταξινόμηση. Ας πούμε για παράδειγμα ότι τα αντικείμενα που θέλουμε να ταξινομήσουμε είναι λίστες (διαφόρων περιεχομένων) και ότι θέλουμε να ταξινομήσουμε αυτές τις λίστες σε αύξουσα σειρά μήκους. Τότε περνάμμε στην sort ως τιμή της παραμέτρου key τη συνάρτηση len της python η οποία σε κάθε λίστα αντιστοιχίζει το μήκος της.

In [12]: X = [ 20*[0], [1, 2], [1, 2, 3], [], ['a', 'b', []], 10*[1] ] X.sort(key=len) [[], [1, 2], [1, 2, 3], ['a', 'b', []], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] Αν τα στοιχεία μας είναι λίστες αριθμών και θέλουμε να τα ταξινομήσουμε κατά φθίνουσα σειρά του αθροίσματος των στοιχείων τους τότε περνάμε στην παράμετρο key τη συνάρτηση sum της python η οποία για μια λίστα αριθμών επιστρέφει το άθροισμα των στοιχείων της. In [13]: X = [ 20*[0], [1, 2], [1, 2, 3], 10*[1] ] X.sort(key=sum, reverse=true) [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 3], [1, 2], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] Ας πούμε τώρα ότι τα στοιχεία μας είναι strings και το μόνο που μας ενδιαφέρει γι' αυτά είναι το πόσα a έχουν μέσα, και θέλουμε να τα ταξινομήσουμε σύμφωνα με αυτόν τον αριθμό. Δεν έχουμε παρά να φτιάξουμε την αντίστοιχη συνάρτηση για την παράμετρο key η οποία να μετράει τα a σε ένα string. In [14]: def f(s): # επιστρέφει πόσα `a` έχει μέσα του το string s count=0 for k in s: if k == 'a': count += 1 count X = ["abc", "aa", "a123", "123", "aaa"] print(sorted(x, key=f)) ['123', 'abc', 'a123', 'aa', 'aaa']