Python

ΕΝΟΤΗΤΑ 13 - Lists and Tuples (Part 2)

image description

Σε αυτό το δωρεάν μάθημα Python, θα συνεχίσουμε την αναφορά μας στα list και ποιο συγκεκριμένα θα δούμε πως μπορούμε να προσθέσουμε και να αφαιρέσουμε στοιχεία από ένα list.

Όπως ήδη έχουμε δει από την προηγούμενη ενότητα, μπορούμε να αλλάξουμε τα δεδομένα μέσα στο list. Το μόνο που έχουμε να κάνουμε είναι να δηλώσουμε το index του οποίο το element θα αλλάξουμε.

App.py

x = ["one", "two", "three", "four", "five"]
x[0] = "first"
print(x)

Output

['first', 'two', 'three', 'four', 'five']

Μπορούμε επίσης να χρησιμοποιήσουμε και δύο αριθμούς index (όπως κάναμε στην προηγούμενη ενότητα για να δείξουμε τα στοιχεία του list) για να ορίσουμε το εύρος των στοιχείων που θέλουμε να αντικαταστήσουμε. Ο γενικός κανόνας είναι lista [index1 : index2] = listb ο οποίος σημαίνει ότι για το lista όλα τα στοιχεία ανάμεσα στο index1 και index2 θα αντικατασταθούν με στοιχεία από την λίστα listb. Φυσικά υπάρχει η περίπτωση το listb να περιέχει περισσότερα ή λιγότερα στοιχεία από το εύρος που ορίζουμε με τα indexes στην λίστα lista. Αυτό δεν είναι πρόβλημα γιατί το μέγεθος του lista θα προσαρμοστεί ανάλογα με τον αριθμό των δεδομένων που περνάμε.

Ας δούμε ένα παράδειγμα για το πως μπορούμε να προσθέσουμε επιπλέον στοιχεία σε ένα list

App.py

x = [1, 2, 3, 4, 5]
x[len(x):] = [6, 7, 8]
print(x)

Output

[1, 2, 3, 4, 5, 6, 7, 8]

Με το function len( ) βρίσκουμε τον αριθμό των elements στη λίστα x οποίος στο συγκεκριμένο παράδειγμα είναι 5. Αυτό τον αριθμό τον χρησιμοποιούμε σαν τον πρώτο index. Όμως, το list x δεν έχει index 5 αφού για τους αριθμούς 1 έως 5 το index ξεκινάει από το 0 και φτάνει μέχρι το 4. Όποτε το 5 είναι η επόμενη θέση στο υπάρχον list από θέλουμε να προσθέσουμε τα καινούργια στοιχεία χωρίς να διαγράψουμε κάποια από τα στοιχεία που ήδη υπάρχουν στην λίστα. Ωραία, ορίζουμε λοιπόν ότι σε μια καινούργια θέση (index 5 ) θα προσθέσουμε καινούργια στοιχεία αλλά δεν γνωρίζουμε τον ακριβή αριθμό των στοιχείων. Για αυτό το λόγο, παραλείπουμε το δεύτερο index. Οπότε τα στοιχεία 6, 7, και 8 θα προστεθούν στην λίστα ξεκινώντας από το index 5 και η λίστα θα μεγαλώσει για όσο χρειάζεται.

Με την ίδια λογική ακριβώς, αντί να προσθέσουμε στοιχεία στο τέλος της λίστας θα μπορούσαμε να τα προσθέσουμε στην αρχή.

App.py

x = [1, 2, 3, 4, 5]
x[:0] = [-1, 0]
print(x)

Output

[-1, 0, 1, 2, 3, 4, 5]

Εδώ ορίζουμε το τελικό index που είναι το 0 χωρίς να έχουμε ορίσει το αρχικό. Οπότε τα καινούργια στοιχεία -1 και 0 θα προστεθούν στην αρχή της λίστας.

Μπορούμε επίσης και να αφαιρέσουμε στοιχεία από μια λίστα με την ίδια ακριβώς λογική. Υπενθυμίζω για άλλη μια φορά ότι το index2 ορίζει μέχρι τον αριθμό που θέλουμε να φτάσουμε χωρίς όμως να τον συμπεριλάβει.

App.py

x = [-1,0, 1, 2, 3, 4, 5]
x[1:-1] = []
print(x)

Output

[-1, 5]

Εδώ ορίζουμε ότι από το index 1 (δηλαδή τον αριθμό 0) μέχρι τον τελευταίο αριθμό (χωρίς όμως να το περιλαμβάνει) αφαίρεσε όλα τα elements. Αυτό που βλέπουμε να έχει απομείνει στην λίστα είναι ο πρώτος και ο τελευταίος αριθμός από την αρχική λίστα.

Αν τώρα σε όλες αυτές τις διαδικασίες, ψάχνετε για έναν ακόμα πιο εύκολο τρόπο να προσθέσετε ή να αφαιρέσετε στοιχεία από μια λίστα, τότε υπάρχει. Η Python για την πρόσθεση επιπλέον στοιχείων μας προσφέρει το function append( ).

App.py

x = [1, 2, 3, 4, 5]
x.append(6)
print(x)

Output

[1, 2, 3, 4, 5, 6]

Μην προσπαθήσετε να προσθέσετε με την append( ) function μια λίστα σε μια άλλη γιατί πολύ απλά το αποτέλεσμα θα είναι να προστεθεί η δεύτερη λίστα σαν element στην πρώτη λίστα. Αυτό δεν είναι σίγουρα αυτό που επιθυμούμε. Εμείς θέλουμε πολύ απλά να προσθέσουμε τα elements από μια λίστα σε μια άλλη.

App.py

x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, 10]
x.append(y)
print(x)

Output

[1, 2, 3, 4, 5, [6, 7, 8, 9, 10]]

Υπάρχει τρόπος να προσθέσουμε σωστά τα στοιχεία μιας λίστας σε μια άλλη? Ναι, και ο τρόπος είναι να χρησιμοποιήσουμε την function extend( ) αντί της append( ).

App.py

x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, 10]
x.extend(y)
print(x)

Output

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Επίσης, υπάρχει και η insert( ) function που μας επιτρέπει να εισάγουμε καινούργια στοιχεία ανάμεσα σε δύο άλλα στοιχεία της λίστας, ή να εισάγει καινούργια στοιχεία στην αρχή της λίστας. Σαν πρώτο όρο δηλώνουμε τον index και σαν δεύτερο όρο την τιμή του στοιχείου που θα κάνουμε εισαγωγή στην λίστα.

App.py

x = [1, 2, 3, 4, 5]
x.insert(2, "Michail")
print(x)

Output

[1, 2, 'Michail', 3, 4, 5]

Εάν θέλουμε να διαγράψουμε στοιχεία από μια λίστα τότε μπορούμε να χρησιμοποιήσουμε την del εντολή (προσέξτε είναι εντολή και όχι function) ή μπορούμε να χρησιμοποιήσουμε την remove( ) function. Ας δούμε πρώτα ένα παράδειγμα με το del statement όπου αφαιρούμε το στοιχείο που υπάρχει στην index θέση 1.

App.py

x = [1, 2, 3, 4, 5]
del x[1]
print(x)

Output

[1, 3, 4, 5]

Όσον αφορά το remove( ) πρέπει να προσέξουμε λίγο, γιατί το αριθμός που δέχεται δεν είναι το index, αλλά είναι ο αριθμός που θέλουμε το remove( ) να ψάξει μέσα στην λίστα αφού το βρει να το διαγράψει. Στο ποιο κάτω παράδειγμα, θέλουμε να διαγράψουμε τον αριθμό 1 από την λίστα, αλλά ο αριθμός 1 δεν είναι ο πρώτος στην λίστα. Το remove ( ) λοιπόν θα ψάξει την λίστα και το πρώτο στοιχείο που θα συναντήσει να είναι 1 θα το διαγράψει. Αν υπάρχουν περισσότερα 1 μέσα στην λίστα τότε πρέπει να καλέσουμε πάλι το remove( ) γιατί διαγράφει μόνο τον πρώτο αριθμό που βρίσκει και όχι όλους τους αριθμούς από την λίστα.

App.py

x = [-2, -1, 0, 1, 2]
x.remove(1)
print(x)

Output

[-2, -1, 0, 2]

Εάν το remove( ) δεν βρει κάποιο element να διαγράψει τότε θα επιστρέψει λάθος.

App.py

x = [-2, -1, 0, 1, 2]
x.remove(3)
print(x)

Output

Traceback (most recent call last):
File "e:\KASSAPOGLOU\PythonRepository\practice\app.py", line 2, in 
x.remove(3)
ValueError: list.remove(x): x not in list

Μπορούμε επίσης, με πολύ εύκολο τρόπο να αντιστρέψουμε την σειρά των στοιχείων με την reverse( ) function.

App.py

x = [1, 2, 3, 4, 5]
x.reverse()
print(x)

Output

[5, 4, 3, 2, 1]

ΕΙΣΗΓΗΤΗΣ

Merry Jhonson

Μιχάλης Κασάπογλου

Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.

loader