Ωραία βρήκαμε ένα τρόπο λοιπόν να αφαιρούμε ένα στοιχείο που εμφανίζεται σε μία λίστα παραπάνω από μία φορά. Ας σκεφτούμε όμως λίγο πιο γενικά. Υλοποιήσαμε έναν αλγόριθμο που ίσως μας φανεί χρήσιμος και στην επίλυση άλλων προβλημάτων.
Υπάρχουν τρόποι ώστε να τον έχουμε διαθέσιμο στην προγραμματιστική μας φαρέτρα, για την επόμενη φορά ? ή θα πρέπει κάνουμε ένα κόπυ πέϊστ, προσαρμόζοντας τα ονόματα των αντικειμένων.
Μέρος 1ο – Δημιουργία συνάρτησης.
Η δημιουργία μίας συνάρτησης ίσως είναι ο πιο απλός τρόπος για την επαναχρησιμοποίηση τμήματος ενός κώδικα. Ας το δούμε:
Ας πάρουμε ως παράδειγμα αυτό που αναφέραμε σε προηγούμενο άρθρο δηλαδή: τη διαγραφή ενός στοιχείου που εμφανίζεται σε μία λίστα περισσότερες από μία φορές.
Είχαμε λοιπόν το εξής τμήμα για τη διαγραφή ενός στοιχείου:
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]
Ας το δούμε τώρα σε συνάρτηση:
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 ??? δηλαδή τι ? δεν επιστρέφει τίποτα ? και πως γίνεται !!!
Θα τα εξηγήσουμε σε επόμενο άρθρο προς το παρόν λοιπόν υλοποιήστε εάν σας μπερδεύει τη συνάρτηση έτσι:
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 όπου, η ίδια συνάρτηση μπορεί να δουλέψει και με λίστα ακεραίων και με λίστα αλφαριθμητικών και με λίστα λιστών και γενικά με οποιαδήποτε λίστα αντικειμένων. Χαρακτηριστικό που ονομάζεται:
πολυμορφισμός
τι πως? δεν καταλάβατε?? ουφ πολλά θέματα προέκυψαν πάμε να λύσουμε ένα και προκύπτουν και άλλα, τι μου θυμίζει αυτό, μα κάτι μου θυμίζει:
ας το αφήσουμε και αυτό το θέμα λοιπόν (τον πολυμορφισμό) για άλλη φορά !!!