Python: λίστες και συμβολοσειρές
Διάσχιση, τεμαχισμός, και οι ενσωματωμένες συναρτήσεις.
40 λεπτά
Θα μάθεις να
- Να προσπελαύνεις στοιχεία λίστας και χαρακτήρες συμβολοσειράς με θετικούς και αρνητικούς δείκτες.
- Να κάνεις τεμαχισμό (slicing) με αρχή, τέλος και βήμα.
- Να διασχίζεις λίστες και συμβολοσειρές με for, και να χρησιμοποιείς len, in, sum, min, max.
- Να χρησιμοποιείς τις μεθόδους append, insert, pop, remove, sort, και τις split και join.
- Να εξηγείς γιατί μια λίστα αλλάζει ενώ μια συμβολοσειρά όχι.
Πολλές τιμές με ένα όνομα
Για τους βαθμούς ενός μαθητή σε δέκα μαθήματα δεν φτιάχνεις δέκα μεταβλητές. Φτιάχνεις μία λίστα (list): μια σειρά τιμών, ανάμεσα σε αγκύλες, χωρισμένες με κόμμα.
grades = [14, 18, 9, 18, 16]
names = ["Άννα", "Βασίλης", "Γιώργος"]
empty = []
print(len(grades), len(names), len(empty))
5 3 0
Μια συμβολοσειρά (string, str) είναι κι αυτή σειρά: σειρά χαρακτήρων. Γι' αυτό λίστες και συμβολοσειρές μοιράζονται σχεδόν όλους τους τρόπους πρόσβασης, και τις βλέπουμε μαζί.
Δείκτες: θετικοί και αρνητικοί
Κάθε στοιχείο έχει μια θέση, τον δείκτη (index). Η αρίθμηση ξεκινά από το . Μετρώντας από το τέλος, οι δείκτες είναι αρνητικοί: το -1 είναι το τελευταίο.
| Χαρακτήρας | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Θετικός δείκτης | 0 | 1 | 2 | 3 | 4 | 5 |
| Αρνητικός δείκτης | -6 | -5 | -4 | -3 | -2 | -1 |
word = "Python"
print(word[0], word[5], word[-1], word[-2])
P n n o
Σε μια σειρά μήκους n, οι έγκυροι δείκτες πάνε από 0 ως n - 1, ή από -n ως -1. Το word[6] δεν υπάρχει και δίνει σφάλμα IndexError.
Τεμαχισμός
Ο τεμαχισμός (slicing) παίρνει ένα κομμάτι της σειράς: s[αρχή:τέλος:βήμα]. Όπως στη range(), η αρχή περιλαμβάνεται, το τέλος όχι.
word = "Python"
print(word[0:2], word[2:], word[:3], word[-3:])
print(word[::2], word[::-1])
Py thon Pyt hon
Pto nohtyP
| Τεμαχισμός | Σημαίνει | Αποτέλεσμα |
|---|---|---|
word[0:2] | από το 0 ως πριν το 2 | Py |
word[2:] | από το 2 ως το τέλος | thon |
word[:3] | από την αρχή ως πριν το 3 | Pyt |
word[-3:] | τα τρία τελευταία | hon |
word[::2] | όλα, με βήμα | Pto |
word[::-1] | όλα, ανάποδα | nohtyP |
Το ίδιο ισχύει για λίστες: grades[-2:] είναι οι δύο τελευταίοι βαθμοί, grades[1:4] ο δεύτερος ως ο τέταρτος.
Διάσχιση
Το for περνά από κάθε στοιχείο με τη σειρά. Υπάρχουν δύο τρόποι:
word = "κάστρο"
for ch in word:
print(ch, end=" ")
print()
for i in range(len(word)):
print(i, word[i])
κ ά σ τ ρ ο
0 κ
1 ά
2 σ
3 τ
4 ρ
5 ο
Ο πρώτος τρόπος δίνει κατευθείαν τα στοιχεία. Ο δεύτερος δίνει τους δείκτες, και χρειάζεται όταν σε ενδιαφέρει η θέση: π.χ. να συγκρίνεις κάθε στοιχείο με το επόμενο. Το end=" " λέει στην print() να μην αλλάξει γραμμή μετά την εμφάνιση.
Χρήσιμες ενσωματωμένες συναρτήσεις
| Συνάρτηση ή τελεστής | Τι κάνει | Παράδειγμα |
|---|---|---|
len(s) | πλήθος στοιχείων | len("Python") δίνει 6 |
x in s | υπάρχει το x μέσα; | "th" in "Python" δίνει True |
sum(L) | άθροισμα αριθμών | sum([1, 2, 5, 9]) δίνει 17 |
min(L), max(L) | ελάχιστο, μέγιστο | max([1, 2, 5, 9]) δίνει 9 |
sorted(L) | νέα ταξινομημένη λίστα | sorted([5, 2, 9]) δίνει [2, 5, 9] |
Το in στις συμβολοσειρές ψάχνει κομμάτι κειμένου, και ξεχωρίζει κεφαλαία από πεζά: το "Th" in "Python" είναι False.
Οι λίστες αλλάζουν
Μια λίστα μπορεί να αλλάξει αφού φτιαχτεί. Οι μέθοδοι καλούνται με τελεία μετά το όνομα της λίστας:
fruits = ["μήλο", "αχλάδι", "σύκο"]
fruits.append("κεράσι")
fruits.insert(1, "μπανάνα")
print(fruits)
last = fruits.pop()
fruits.remove("σύκο")
print(last, fruits)
fruits[0] = "πορτοκάλι"
print(fruits)
['μήλο', 'μπανάνα', 'αχλάδι', 'σύκο', 'κεράσι']
κεράσι ['μήλο', 'μπανάνα', 'αχλάδι']
['πορτοκάλι', 'μπανάνα', 'αχλάδι']
| Μέθοδος | Τι κάνει |
|---|---|
append(x) | προσθέτει το x στο τέλος |
insert(i, x) | βάζει το x στη θέση i, σπρώχνοντας τα υπόλοιπα δεξιά |
pop() | αφαιρεί και επιστρέφει το τελευταίο (ή το pop(i) αυτό στη θέση i) |
remove(x) | αφαιρεί την πρώτη εμφάνιση της τιμής x |
sort() | ταξινομεί τη λίστα επί τόπου |
index(x), count(x) | θέση της πρώτης εμφάνισης, πλήθος εμφανίσεων |
Οι συμβολοσειρές δεν αλλάζουν
Μια συμβολοσειρά είναι αμετάβλητη (immutable): το word[0] = "J" δίνει σφάλμα. Οι μέθοδοί της δεν την αλλάζουν, επιστρέφουν νέα:
s = "Hello world"
t = s.replace("world", "class")
print(s)
print(t, t.upper(), t.lower())
Hello world
Hello class HELLO CLASS hello class
Δύο μέθοδοι γεφυρώνουν λίστες και συμβολοσειρές. Η split() κόβει κείμενο σε λίστα, και η join() ενώνει λίστα συμβολοσειρών σε κείμενο:
line = "12,15,9"
parts = line.split(",")
print(parts)
print("-".join(["2026", "09", "26"]))
print("Άννα Βασίλης Γιώργος".split())
['12', '15', '9']
2026-09-26
['Άννα', 'Βασίλης', 'Γιώργος']
Πρόσεξε ότι η split() δίνει λίστα συμβολοσειρών, '12' και όχι . Για να τις αθροίσεις, πρέπει να τις μετατρέψεις με int(). Χωρίς όρισμα, η split() κόβει στα κενά.
Λυμένα παραδείγματα
Παράδειγμα 1
Δίνεται s = «informatics». Τι δίνουν τα s[2:6], s[-4:], s[::3] και s[-1:-4:-1];
Δοκίμασέ το πρώτα. Μετά δες τη λύση.
Παράδειγμα 2
Μια γραμμή κειμένου περιέχει βαθμούς χωρισμένους με κενά, π.χ. «14 18 9 16». Βρες τον μέσο όρο και πόσοι βαθμοί είναι τουλάχιστον 15.
Δοκίμασέ το πρώτα. Μετά δες τη λύση.
Παράδειγμα 3
Γράψε πρόγραμμα που ελέγχει αν μια λέξη είναι παλίνδρομη, δηλαδή διαβάζεται ίδια και ανάποδα.
Δοκίμασέ το πρώτα. Μετά δες τη λύση.
Ασκήσεις
Πρώτα ερωτήσεις με επιλογές: διαλέγεις, πατάς «Έλεγξε» και μαθαίνεις αμέσως αν το βρήκες και γιατί. Στο τέλος, λίγες ασκήσεις χωρίς επιλογές — εκεί κρύβεται μόνο η απάντηση.
Τα κατάφερες;
- Να προσπελαύνεις στοιχεία λίστας και χαρακτήρες συμβολοσειράς με θετικούς και αρνητικούς δείκτες.
- Να κάνεις τεμαχισμό (slicing) με αρχή, τέλος και βήμα.
- Να διασχίζεις λίστες και συμβολοσειρές με for, και να χρησιμοποιείς len, in, sum, min, max.
- Να χρησιμοποιείς τις μεθόδους append, insert, pop, remove, sort, και τις split και join.
- Να εξηγείς γιατί μια λίστα αλλάζει ενώ μια συμβολοσειρά όχι.
Λύσε τις ασκήσεις πιο πάνω και θα δεις εδώ πού στέκεσαι.