Python Δομές Δεδομένων: List, Tuple, Set και Dictionary

Ξείνηε από Yunuh, Μαρ 18, 2026, 01:23 ΜΜ

« προηγούενο - εόμνο »

Yunuh

Οι δομές δεδομένων στην Python αποτελούν τα βασικά δομικά στοιχεία των προγραμμάτων σας. Χρησιμοποιούνται για την αποτελεσματική αποθήκευση, επεξεργασία και διαχείριση δεδομένων. Οι ενσωματωμένες δομές δεδομένων της Python, δηλαδή List, Tuple, Set και Dictionary, είναι απαραίτητες τόσο για αρχάριους όσο και για επαγγελματίες προγραμματιστές. Το 2026, αυτές οι δομές χρησιμοποιούνται εντατικά στην επιστήμη δεδομένων (Pandas, NumPy), στην ανάπτυξη web (Django, Flask) και σε έργα τεχνητής νοημοσύνης (ενσωμάτωση με tensors του PyTorch).

Αναζητήσεις στο Google όπως "Python list", "Python dictionary", "Python tuple vs list", "Python set" είναι από τις πιο δημοφιλείς θεματικές Python στην Ελλάδα και παγκοσμίως. Η καλή κατανόηση αυτών των δομών βελτιώνει την απόδοση του κώδικα σας, μειώνει τα λάθη και διευκολύνει την εργασία με μεγάλα σύνολα δεδομένων.

Γιατί Πρέπει να Μάθετε Δομές Δεδομένων; (Προοπτική 2026)
  • Ευελιξία: Χάρη στον δυναμικό τύπο της Python, οι δομές δεδομένων τροποποιούνται εύκολα.
  • Απόδοση: Η σωστή επιλογή δομής (π.χ. Set για έλεγχο μέλους) μειώνει τον χρόνο εκτέλεσης από δευτερόλεπτα σε χιλιοστά του δευτερολέπτου.
  • Πραγματική χρήση: Οι απαντήσεις API είναι σε μορφή JSON (παρόμοιο με dictionary), η ανάλυση δεδομένων ξεκινά με lists.
  • Πλεονέκτημα καριέρας: Στις συνεντεύξεις εργασίας, ερωτήσεις για "Python data structures" είναι κλασικές.

1. List (Λίστα) - Ταξινομημένη και Τροποποιήσιμη Συλλογή
Οι λίστες είναι η πιο συχνά χρησιμοποιούμενη δομή δεδομένων. Ορίζονται με τετράγωνες αγκύλες [], προσπελάζονται με δείκτες (ξεκινούν από 0) και είναι τροποποιήσιμες (mutable).
Ορισμός
φρούτα = ["μήλο", "αχλάδι", "κεράσι", "μπανάνα"]
αριθμοί = [1, 5, 3, 8, 2]

Πρόσβαση και Τροποποίηση

print(φρούτα[0])  # μήλο
φρούτα[1] = "πορτοκάλι"  # τροποποίηση
print(φρούτα)  # ['μήλο', 'πορτοκάλι', 'κεράσι', 'μπανάνα']

Κοπή (Slicing)

print(φρούτα[1:3])  # ['πορτοκάλι', 'κεράσι']
print(φρούτα[:2])  # πρώτα 2
print(φρούτα[-2:])  # τελευταία 2

Κοινές Μέθοδοι

φρούτα.append("σταφύλι")  # προσθήκη στο τέλος
φρούτα.insert(2, "ακτινίδιο")  # προσθήκη σε συγκεκριμένο δείκτη
φρούτα.remove("κεράσι")  # διαγραφή τιμής
φρούτα.pop()  # αφαίρεση και επιστροφή τελευταίου στοιχείου
φρούτα.sort()  # ταξινόμηση (αλφαβητική/αριθμητική)
αριθμοί.sort(reverse=True)  # αντίστροφη ταξινόμηση
print(len(φρούτα))  # μήκος

List Comprehension (Σύντομος Τρόπος)

τετράγωνα = [x**2 for x in range(10) if x % 2 == 0]
print(τετράγωνα)  # [0, 4, 16, 36, 64]

Ενσωματωμένες Λίστες (2D)

πίνακας = [[1, 2, 3], [4, 5, 6]]
print(πίνακας[1][2])  # 6

Πλεονεκτήματα: Ταξινομημένη, επιτρέπει επαναλαμβανόμενα στοιχεία, δυναμικό μέγεθος.
Μειονεκτήματα: Αργή αναζήτηση σε μεγάλα δεδομένα (O(n)).

2. Tuple (Πλειάδα) - Ταξινομημένη και Αμετάβλητη Συλλογή
Οι πλειάδες μοιάζουν με λίστες αλλά είναι αμετάβλητες (immutable). Ορίζονται με παρενθέσεις ().
Ορισμός

χρώματα = ("κόκκινο", "πράσινο", "μπλε")
συντεταγμένες = (40.7128, -74.0060)  # Συντεταγμένες NYC

Πρόσβαση

print(χρώματα[1])  # πράσινο
# χρώματα[1] = "κίτρινο"  # Σφάλμα! Αμετάβλητο

Μοναδικό Στοιχείο Tuple (υποχρεωτικό κόμμα)

μοναδικό = (5,)  # Διαφορετικά γίνεται int: (5)
Αποσυσκευασία (Unpacking)

x, y = συντεταγμένες
print(x, y)

Μέθοδοι (Λίγες)

print(χρώματα.count("πράσινο"))  # Πόσα
print(χρώματα.index("μπλε"))  # Δείκτης

Πλεονεκτήματα: Πιο γρήγορο, hashable (μπορεί να χρησιμοποιηθεί ως κλειδί σε dictionary), εξασφαλίζει ακεραιότητα δεδομένων.
Χρήση: Σταθερά δεδομένα (ονόματα ημερών, συντεταγμένες από API).

3. Set (Σύνολο) - Αταξινόμητη και Μοναδική Συλλογή
Τα σύνολα ορίζονται με άγκιστρα {}, δεν επιτρέπουν επαναλαμβανόμενα στοιχεία, ο έλεγχος μέλους είναι πολύ γρήγορος.
Ορισμός

μοναδικά = {1, 2, 3, 3, 4}  # Το 3 επαναλαμβάνεται, μένει μοναδικό
print(μοναδικά)  # {1, 2, 3, 4}

Προσθήκη/Διαγραφή

φρούτα_σύνολο = {"μήλο", "αχλάδι"}
φρούτα_σύνολο.add("κεράσι")
φρούτα_σύνολο.add("μήλο")  # Δεν προστίθεται ξανά
φρούτα_σύνολο.remove("αχλάδι")  # Σφάλμα αν δεν υπάρχει
φρούτα_σύνολο.discard("σταφύλι")  # Χωρίς σφάλμα αν δεν υπάρχει

Πράξεις Συνόλων (Μαθηματικά)

σύνολο1 = {1, 2, 3, 4}
σύνολο2 = {3, 4, 5, 6}
print(σύνολο1.union(σύνολο2))  # Ένωση: {1,2,3,4,5,6}
print(σύνολο1.intersection(σύνολο2))  # Τομή: {3,4}
print(σύνολο1.difference(σύνολο2))  # Διαφορά: {1,2}
print(σύνολο1.symmetric_difference(σύνολο2))  # Συμμετρική διαφορά

Έλεγχος Μέλους (Πολύ Γρήγορος)

print(3 in σύνολο1)  # True
Πλεονεκτήματα: Μοναδικά δεδομένα (καθαρισμός λίστας email), O(1) έλεγχος μέλους.
Μειονεκτήματα: Αταξινόμητο, δεν υποστηρίζει δείκτες.

4. Dictionary (Λεξικό) - Ζεύγη Κλειδιού-Τιμής
Τα λεξικά ορίζονται με {key: value}, τα κλειδιά είναι μοναδικά και hashable.
Ορισμός

άτομο = {
    "όνομα": "Mehmet",
    "ηλικία": 35,
    "πόλη": "Αγκυρα",
    "χόμπι": ["βιβλία", "αθλητισμός"]
}

Πρόσβαση και Τροποποίηση

print(άτομο["όνομα"])  # Mehmet
άτομο["ηλικία"] = 36  # Ενημέρωση
άτομο["επάγγελμα"] = "μηχανικός"  # Νέα προσθήκη

Κοινές Μέθοδοι

print(άτομο.keys())  # Κλειδιά
print(άτομο.values())  # Τιμές
print(άτομο.items())  # Ζεύγη (key, value) ως tuples
print(άτομο.get("email", "Δεν υπάρχει"))  # Με προεπιλεγμένη τιμή

del άτομο["πόλη"]  # Διαγραφή
άτομο.pop("ηλικία")  # Διαγραφή και επιστροφή

Ενσωματωμένα Λεξικά

εταιρεία = {
    "υπάλληλος1": {"όνομα": "Ayşe", "μισθός": 10000},
    "υπάλληλος2": {"όνομα": "Ali", "μισθός": 12000}
}
print(εταιρεία["υπάλληλος1"]["μισθός"])

Dict Comprehension

τετράγωνα_λεξικό = {x: x**2 for x in range(5)}
print(τετράγωνα_λεξικό)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Πλεονεκτήματα: Γρήγορη πρόσβαση με κλειδί O(1), παρόμοιο με JSON.
Χρήση: Ρυθμίσεις, απαντήσεις API, παρόμοιο με βάση δεδομένων.

Σύγκριση Χαρακτηριστικών
  • Ορισμός: List: [], Tuple: (), Set: {}, Dictionary: {key: value}
  • Ταξινόμηση: List: Ναι, Tuple: Ναι, Set: Όχι, Dictionary: Όχι (από 3.7+ διατηρεί σειρά εισαγωγής)
  • Τροποποιήσιμο: List: Ναι, Tuple: Όχι, Set: Ναι, Dictionary: Ναι
  • Επαναλαμβανόμενα Στοιχεία: List: Ναι, Tuple: Ναι, Set: Όχι, Dictionary: Κλειδιά όχι
  • Δείκτες: List: Ναι, Tuple: Ναι, Set: Όχι, Dictionary: Με κλειδί
  • Απόδοση: List: Αργή αναζήτηση, Tuple: Γρήγορο, Set: Πολύ γρήγορος έλεγχος μέλους, Dictionary: Γρήγορη πρόσβαση με κλειδί

Προχωρημένες Χρήσεις και Συμβουλές
  • Μονάδα Collections: from collections import defaultdict, Counter, deque
from collections import Counter
μέτρηση = Counter("γεια")
print(μέτρηση)  # Counter({'γ': 1, 'ε': 1, 'ι': 1, 'α': 1})

  • Απόδοση: Για μεγάλα δεδομένα, προτιμήστε Set/Dict.
  • Αντιγραφή: Για αντιγραφή list/dict, χρησιμοποιήστε .copy() ή deepcopy (import copy), αλλιώς προκύπτει πρόβλημα αναφοράς.

Συμπέρασμα και Πρακτικές Συμβουλές
Οι δομές δεδομένων είναι η δύναμη της Python. Λάθος επιλογή επιβραδύνει τον κώδικα, σωστή τον κάνει επαγγελματικό. Για πρακτική:
  • Λύστε προβλήματα δομών δεδομένων σε LeetCode/HackerRank.
  • Πραγματικό έργο: Καλάθι αγορών (dict), μετρητής μοναδικών λέξεων (set).
  • Πηγές: Τεκμηρίωση Python (datastructures), βιβλίο Automate the Boring Stuff.
Με αυτόν τον οδηγό, θα κατανοήσετε πλήρως τις δομές δεδομένων. Για παραδείγματα έργων ή συγκεκριμένη δομή, αφήστε σχόλιο! Το 2026, οι δομές δεδομένων θα δώσουν μεγάλη ταχύτητα στα έργα Python σας.