Ωραία βρήκαμε ένα τρόπο λοιπόν να αφαιρούμε ένα στοιχείο που εμφανίζεται σε μία λίστα παραπάνω από μία φορά. Ας σκεφτούμε όμως λίγο πιο γενικά. Υλοποιήσαμε έναν αλγόριθμο που ίσως μας φανεί χρήσιμος και στην επίλυση άλλων προβλημάτων. Υπάρχουν τρόποι ώστε να τον έχουμε διαθέσιμο στην προγραμματιστική μας φαρέτρα, για την επόμενη φορά ? ή θα πρέπει κάνουμε ένα κόπυ πέϊστ, προσαρμόζοντας τα ονόματα των αντικειμένων.
Μέρος 1ο – Functions
Ας πάρουμε ως παράδειγμα αυτό που αναφέραμε σε προηγούμενο άρθρο δηλαδή: τη διαγραφή ενός στοιχείου που εμφανίζεται σε μία λίστα περισσότερες από μία φορές.
Είχαμε λοιπόν το εξής τμήμα για τη διαγραφή ενός στοιχείου:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>> >> a_list = [3,4,8,5,8,9,8,2,10] item = input("Item to delete=") i = 0 while i <= len(a_list)-1: if item == a_list[i]: print i, a_list.pop(i) else: i += 1 print a_list ------------------------------ >>> Item to delete=8 2 8 3 8 4 8 [3, 4, 5, 9, 2, 0] |
Ας το δούμε τώρα σε συνάρτηση:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
>>> >>> def pop_all(item, a_list): '''Η Συνάρτηση διαγράφει τα στοιχεία item από τη λίστα a_list''' i = 0 while i <= len(a_list)-1: if item == a_list[i]: print i, a_list.pop(i) else: i += 1 # Παραδείγματα κλήσης #---------------------------------------------------- my_list = [3,4,8,5,8,9,8,2,0] pop_all(8, my_list) print my_list names_list = ['tasos', 'maria', 'antonis', 'anna', 'tasos'] pop_all('tasos', names_list) print names_list list_of_lists = [[1,2,3],[4,5,6],[7,8,9],[1,2,3]] x = [1,2,3] pop_all(x, list_of_lists) print list_of_lists # ------------------------------------------------- # Αποτελέσματα >>> 2 8 3 8 4 8 [3, 4, 5, 9, 2, 0] ------------------------------------------------- 0 tasos 3 tasos ['maria', 'antonis', 'anna'] ------------------------------------------------- 0 [1, 2, 3] 2 [1, 2, 3] [[4, 5, 6], [7, 8, 9]] >>> |
Χμμμ ένα θέμα τώρα που προκύπτει είναι ότι η συνάρτηση αυτή δεν έχει return ??? δηλαδή τι ? δεν επιστρέφει τίποτα ? και πως γίνεται !!!
Θα τα εξηγήσουμε σε επόμενο άρθρο προς το παρόν λοιπόν υλοποιήστε εάν σας μπερδεύει τη συνάρτηση όπως φαίνεται πιο κάτω με το γνωστό return στο τέλος της (υπενθυμίζουμε ότι το αντικείμενο λίστας στην python παράγει mutable στιγμιότυπα:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> >>> def pop_all(item, a_list): '''Η Συνάρτηση διαγράφει τα στοιχεία item από τη λίστα a_list''' i = 0 while i <= len(a_list)-1: if item == a_list[i]: print i, a_list.pop(i) else: i += 1 return a_list |
Εν τω μεταξύ (ή εντωμεταξύ) μπορείτε να απολαύσετε την ευελιξία της python όπου, η ίδια συνάρτηση μπορεί να δουλέψει και με λίστα ακεραίων και με λίστα αλφαριθμητικών και με λίστα λιστών και γενικά με οποιαδήποτε λίστα αντικειμένων. Χαρακτηριστικό που ονομάζεται:
τι πως? δεν καταλάβατε?? ουφ πολλά θέματα προέκυψαν πάμε να λύσουμε ένα και προκύπτουν και άλλα, τι μου θυμίζει αυτό, μα κάτι μου θυμίζει:
ας το αφήσουμε και αυτό το θέμα λοιπόν (τον πολυμορφισμό) για άλλη φορά !!! Αυτή η παροιμία “μην κάνεις σήμερα αυτό που μπορείς να αφήσεις για αύριο” αποδεικνύεται συχνά πολύ χρήσιμη ή …. ή μήπως τη θυμάμαι λάθος ???