Μετάβαση στο περιεχόμενο

Python: λίστες και συμβολοσειρές

Διάσχιση, τεμαχισμός, και οι ενσωματωμένες συναρτήσεις.

40 λεπτά

Θα μάθεις να

  1. Να προσπελαύνεις στοιχεία λίστας και χαρακτήρες συμβολοσειράς με θετικούς και αρνητικούς δείκτες.
  2. Να κάνεις τεμαχισμό (slicing) με αρχή, τέλος και βήμα.
  3. Να διασχίζεις λίστες και συμβολοσειρές με for, και να χρησιμοποιείς len, in, sum, min, max.
  4. Να χρησιμοποιείς τις μεθόδους append, insert, pop, remove, sort, και τις split και join.
  5. Να εξηγείς γιατί μια λίστα αλλάζει ενώ μια συμβολοσειρά όχι.

Πολλές τιμές με ένα όνομα

Για τους βαθμούς ενός μαθητή σε δέκα μαθήματα δεν φτιάχνεις δέκα μεταβλητές. Φτιάχνεις μία λίστα (list): μια σειρά τιμών, ανάμεσα σε αγκύλες, χωρισμένες με κόμμα.

grades = [14, 18, 9, 18, 16]
names = ["Άννα", "Βασίλης", "Γιώργος"]
empty = []
print(len(grades), len(names), len(empty))
5 3 0

Μια συμβολοσειρά (string, str) είναι κι αυτή σειρά: σειρά χαρακτήρων. Γι' αυτό λίστες και συμβολοσειρές μοιράζονται σχεδόν όλους τους τρόπους πρόσβασης, και τις βλέπουμε μαζί.

Δείκτες: θετικοί και αρνητικοί

Κάθε στοιχείο έχει μια θέση, τον δείκτη (index). Η αρίθμηση ξεκινά από το 00. Μετρώντας από το τέλος, οι δείκτες είναι αρνητικοί: το -1 είναι το τελευταίο.

ΧαρακτήραςPython
Θετικός δείκτης012345
Αρνητικός δείκτης-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 ως πριν το 2Py
word[2:]από το 2 ως το τέλοςthon
word[:3]από την αρχή ως πριν το 3Pyt
word[-3:]τα τρία τελευταίαhon
word[::2]όλα, με βήμα 22Pto
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' και όχι 1212. Για να τις αθροίσεις, πρέπει να τις μετατρέψεις με int(). Χωρίς όρισμα, η split() κόβει στα κενά.

Λυμένα παραδείγματα

Παράδειγμα 1

Δίνεται s = «informatics». Τι δίνουν τα s[2:6], s[-4:], s[::3] και s[-1:-4:-1];

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Παράδειγμα 2

Μια γραμμή κειμένου περιέχει βαθμούς χωρισμένους με κενά, π.χ. «14 18 9 16». Βρες τον μέσο όρο και πόσοι βαθμοί είναι τουλάχιστον 15.

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Παράδειγμα 3

Γράψε πρόγραμμα που ελέγχει αν μια λέξη είναι παλίνδρομη, δηλαδή διαβάζεται ίδια και ανάποδα.

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Ασκήσεις

Πρώτα ερωτήσεις με επιλογές: διαλέγεις, πατάς «Έλεγξε» και μαθαίνεις αμέσως αν το βρήκες και γιατί. Στο τέλος, λίγες ασκήσεις χωρίς επιλογές — εκεί κρύβεται μόνο η απάντηση.

Πολλαπλή επιλογήΆσκηση 1 από 14
Για L = [10, 20, 30, 40, 50], τι είναι το L[-2];

Τα κατάφερες;

  • Να προσπελαύνεις στοιχεία λίστας και χαρακτήρες συμβολοσειράς με θετικούς και αρνητικούς δείκτες.
  • Να κάνεις τεμαχισμό (slicing) με αρχή, τέλος και βήμα.
  • Να διασχίζεις λίστες και συμβολοσειρές με for, και να χρησιμοποιείς len, in, sum, min, max.
  • Να χρησιμοποιείς τις μεθόδους append, insert, pop, remove, sort, και τις split και join.
  • Να εξηγείς γιατί μια λίστα αλλάζει ενώ μια συμβολοσειρά όχι.

Λύσε τις ασκήσεις πιο πάνω και θα δεις εδώ πού στέκεσαι.