Delete From List !!

Μέρος 2ο

Επανερχόμαστε για να εξετάσουμε το πρόβλημα προηγούμενου άρθρου με τη διαγραφή ενός στοιχείου που εμφανίζεται πολλές φορές σε μία λίστα.

Image result for delete from list

Βασικός στόχος είναι να προσεγγίσουμε το θέμα με τα εργαλεία που αναφέρει το βιβλίο όπως για παράδειγμα η μέθοδος pop που αναφέρθηκε. Ας υποθέσουμε για αρχή ότι κάθε στοιχείο εμφανίζεται μόνο μία φορά. Έτσι για να χρησιμοποιήσουμε τη μέθοδο αυτή (pop) πρέπει να γνωρίζουμε τη θέση (index) του στοιχείου μέσα στη λίστα. Εάν δεν την ξέρουμε εκτελούμε πρώτα μία σειριακή αναζήτηση εφόσον  τα στοιχεία δεν είναι ταξινομημένα.

Διαγραφή στοιχείου με πολλαπλή εμφάνιση

Τι γίνεται όμως εάν το στοιχείο που θέλουμε να διαγράψουμε μπορεί να εμφανίζεται περισσότερες από μία φορές. Μπορεί τότε η pop να μας βοηθήσει; Μία σκέψη είναι να διασχίσουμε τη λίστα με την εντολή επανάληψης for και κάθε φορά που βρίσκουμε το στοιχείο να το διαγράφουμε. Ας το δούμε να “δουλεύει”

Ουπς. Όταν δεν υπάρχει το στοιχείο είναι ΟΚ, όταν προσπαθούμε να διαγράψουμε το 8 εμφανίζεται λάθος και είναι εμφανές το γιατί, εφόσον ενώ  η λίστα διάσχισης υπολογίζεται μόνο στην αρχή για το αρχικό μέγεθος της λίστας, αφαιρώντας κάθε φορά και ένα στοιχείο το μέγεθος της λίστας αλλάζει(μικραίνει) επιστρέφοντας indexerror.

Διαγραφή με χρήση for

Για να κάνουμε μία ντρίπλα στον τρόπο διάσχισης.

Διασχίζοντας τη λίστα ανάστροφα δεν επηρεάζεται ο κώδικας από τη αλλαγή του μεγέθους της, εφόσον ο δείκτης i λαμβάνει την τιμή του μήκους της μόνο μία φορά στον υπολογισμό του range στην αρχή.

Διαγραφή με χρήση while

Ακολουθεί άλλη μία εκδοχή ίσως πιο κατανοητή με τη χρήση της while. Εδώ επειδή το μήκος επαναϋπολογίζεται κάθε φορά που ελέγχεται η συνθήκη τέλους της while, η επανάληψη δουλεύει κανονικά.

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

Αφαίρεση στοιχείου με συνθετική προσέγγιση

Θα δούμε όμως μία άλλη προσέγγιση χωρίς να χρησιμοποιήσουμε τη μέθοδο pop και πάντα μέσα στην ύλη του βιβλίου. Έως τώρα σκεφτόμασταν αφαιρετικά δηλαδή πως θα αφαιρέσουμε στοιχεία από μία λίστα. Ας προσεγγίσουμε το πρόβλημα συνθετικά, δηλαδή πως θα φτιάξουμε μία λίστα η οποία θα περιέχει όλα τα στοιχεία της αρχικής εκτός από αυτά που δεν επιθυμούμε. Έτσι και αλλιώς στη γλώσσα αυτή όπου τα πάντα είναι αντικείμενα (objects) και στιγμιότυπα μίας κλάσης όπως ένας ακέραιος αριθμός, ένας χαρακτήρας, μία λίστα. Αποτελεί πολύ κοινή πρακτική να φτιάχνουμε νέα αντικείμενα.

Χρήση list comprehension

Λόγω της κοινής αυτής πρακτικής έτσι εγκυκλοπαιδικά να αναφέρουμε ότι η python έχει και μία τεχνική η οποία ονομάζεται list comprehension (κατανόηση λίστας ?) που μπορεί να κάνει τα παραπάνω σε μία γραμμή κώδικα. Να σημειώσουμε ότι δεν εξηγείται στο βιβλίο όποτε δεν τη χρησιμοποιούμε και σε εξετάσεις.

Σκεφτείτε τώρα για την άλλη φορά μπορείτε να τα πάτε όλα αυτά ένα βήμα παρακάτω ώστε να υπάρχει μεγαλύτερη ευκολία στην επαναχρησιμοποίησή τους ….

Καλό διάβασμα…

Image result for reuse

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.