Δημοσιεύτηκε: 29 Ιουν 2011, 08:57
από sv1jsb
Ilias95 έγραψε:Ευχαριστώ για τις απαντήσεις.
@sv1jsb:
Μια παρατήρηση.
Το τελευταίο πρόγραμμα που έδωσες:
Spoiler: show
Κώδικας: Επιλογή όλων
lista = ['a', 'b', 'c']
for i in range(len(lista)):
print (lista[i])
del lista[i]

Δεν δουλεύει ούτε σε python2 ούτε σε python3.
Δίνει έξοδο:
Κώδικας: Επιλογή όλων
a
c
Traceback (most recent call last):
File "test.py", line 6, in <module>
print (lista[i])
IndexError: list index out of range


Εκτυπώνει όμως την πρώτη και την τρίτη τιμή τις λίστα πριν δώσει το σφάλμα.


Σωστά, δεν δουλεύει, ξέρεις γιατί;
Γιατί σβήνοντας ένα στοιχείο της λίστας αλλάζουμε το μέγεθος της και βρισκόμαστε μέσα σε for.
Έστω ότι είχε στην αρχή 4 στοιχεία, το range θα πάρει τιμές από 0 ως 3, εμείς σβήσαμε όμως ένα στοιχείο, άρα τώρα έχει μέγεθος 3 στοιχεία (από 0 ως 2).
Όταν θα πάει να ζητήσει το lista[3] αυτό δεν θα υπάρχει.
Γι' αυτό χρειάζεται προσοχή όταν σβήνεις στοιχεία, γενικώς. Συνήθως δεν χρειάζεται να σβήνεις μεταβλητές.
Η python έχει και garbage collection. Δηλαδή, αφαιρεί από την μνήμη μια μεταβλητή που δεν χρησιμοποιείται.