Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

...ασύγχρονα μαθήματα python

Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό medigeek » 22 Ιουν 2009, 07:14

Το αρχείο του μαθήματος:
http://files.ubuntu-gr.org/learning/python/02-lists.html

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

Προηγουμένως μάθατε για μεταβλητές και πώς να τις εκμεταλλεύεστε. Σ'αυτό το μάθημα θα σας δείξουμε μερικά παραδείγματα με λίστες και πίνακες, όπου μπορείτε να χρησιμοποιείτε μεταβλητές είτε να προσθέσετε αντικείμενα κατ'ευθείαν, όπως αριθμούς και χαρακτήρες κειμένου ("text strings").

Υπάρχουν 4 είδη πινάκων, τα οποία πιστεύω είναι εύκολα στη χρήση και στην κατανόηση: Λίστες (Arrays), λεξικά (Dictionaries), πλειάδες (Tuples) και σύνολα (Sets)

Update: Μια πολύ καλή ερώτηση του χρήστη juanjo με παρότρυνε να φτιάξω τον ακόλουθο πίνακα:




Τί χρειάζεστε; Τί προτείνωCode
Στοιχεία/αντικείμενα με τα οποία θέλετε να
εκμεταλλευτείτε (προσθαφαίρεση και μετατροπή/αντικατάσταση);
Λίστα
list()
Στοιχεία/αντικείμενα που δεν
πρόκειται να αλλάξουν;
Πλειάδα
tuple()
Στοιχεία/αντικείμενα που χρησιμεύουν
στην αντιστοιχία των τιμών τους με άλλες λίστες/μεταβλητές/εντολές;
Λεξικό
dict()
Στοιχεία/αντικείμενα που ανήκουν σε σύνολα
τα οποία θέλετε να ελέγξετε και να μεταχειριστείτε;
Σύνολο
set()


Ερωτήσεις;

Οποιεσδήποτε ερωτήσεις έχετε, εναποθέστε τις σε αυτό το θέμα - Μην δημιουργήσετε καινούργιο.

Ώρα για διάβασμα!

Η ύλη για αυτή τη βδομάδα είναι ένα μόνο (αλλά αρκετά σημαντικό) κεφάλαιο:

11. Δομές δεδομένων

Αρχίζουμε!

Σημειώσεις:
1. Υπενθυμίζω τη σελίδα που δίνει τη λίστα των μαθημάτων: http://files.ubuntu-gr.org/learning/python/
2. Αν θέλει κάποιος να βοηθήσει σαν καθηγητής για την προετοιμασία κειμένων και ασκήσεων, επικοινωνήστε μαζί μου ή με τον sokoban4ever μέσω ΠΜ.

Επιπλέον ενημέρωση:
http://python.computersci.org/Collectio ... stFeatures
Τελευταία επεξεργασία από medigeek και 29 Ιουν 2011, 08:33, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες

Δημοσίευσηαπό sokoban4ever » 22 Ιουν 2009, 21:14

Καλό διάβασμα παιδιά και από μένα :P
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό medigeek » 23 Ιουν 2009, 08:37

Σημαντική αλλαγή!! Ξέχασα να προσθέσω τα σύνολα (sets), κι αυτά είναι στην ύλη του μαθήματος!
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό malos » 25 Ιουν 2009, 14:01

Δοκίμασα στην πράξη την sort

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
# _*_ coding: utf-8 _*_

alphabet = ['γ', 'ω', 'ζ', 'χ', 'β', 'α', 'λ', 'ρ', 'ν', 'μ', 'ο', 'π', 'υ', 'σ', 'φ', 'τ', 'δ', 'η', 'ε', 'θ', 'κ', 'ι', 'ξ', 'ψ' ]
print('Έχω', len(alphabet), 'γράμματα')

print('Τα γράμματα είναι :', end=" ")
for gramma in alphabet:
    print (gramma, end=" ")

print('Θα ταξινομήσω τη λίστα μου τώρα')
alphabet.sort()

print('Η ταξινομημένη λίστα μου είναι', alphabet)


Έξοδος

Κώδικας: Επιλογή όλων
pal@malos:~$ Επιφάνεια\ εργασίας/my_program.py
Έχω 24 γράμματα
Τα γράμματα είναι : γ ω ζ χ β α λ ρ ν μ ο π υ σ φ τ δ η ε θ κ ι ξ ψ Θα ταξινομήσω τη λίστα μου τώρα
Η ταξινομημένη λίστα μου είναι ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω']
pal@malos:~$


Μου άρεσε που το πέτυχα, αν και δεν κατάλαβα την end=" ". Νόμιζα ότι θα μου βγάλει νέα γραμμή. Πως να βγάλω νέα γραμμή ; (ξέχασα)
Έτσι ώστε αυτό :
ι ξ ψ Θα ταξινομήσω τη λίστα μου τώρα

να φανεί έτσι ;

ι ξ ψ
Θα ταξινομήσω τη λίστα μου τώρα
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1221
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό medigeek » 25 Ιουν 2009, 14:06

1.
Κώδικας: Επιλογή όλων
# -*- coding: utf-8 -*-


2. Με το \n:
Κώδικας: Επιλογή όλων
print('\nΘα ταξινομήσω τη λίστα μου τώρα')


:thumbup:
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό malos » 25 Ιουν 2009, 14:16

# -*- coding: utf-8 -*-

Όχι κάτω παύλα λοιπόν, αλλά κανονική παύλα ! Το κατάλαβα.

Ευχαριστώ.
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1221
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό Μάριος Ζηντίλης » 25 Ιουν 2009, 14:23

Κανονικά, κάθε φορά που η print() βγάζει κάτι στην έξοδο, το "τελειώνει" με νέα γραμμή, δηλαδή αν είχες:

Κώδικας: Επιλογή όλων
for gramma in alphabet:
    print (gramma)


θα έπαιρνες έξοδο:
Κώδικας: Επιλογή όλων
γ
ω
ζ
χ
β
α
λ
ρ
ν
μ
ο
π
υ
σ
φ
τ
δ
η
ε
θ
κ
ι
ξ
ψ


Η end=" " λέει ότι η print() θα τελειώνει με κενό αντί για νέα γραμμή, ώστε παίρνεις την έξοδο που παίρνεις. Μπορείς να πετύχεις διάφορα αποτελέσματα πειραματιζόμενος με την end.
Άβαταρ μέλους
Μάριος Ζηντίλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 220
Εγγραφή: 25 Σεπ 2008, 11:16
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό medigeek » 25 Ιουν 2009, 14:25

Θα σου πρότεινα αυτό το στυλ προγραμματισμού, με το join() και τη χρήση του %s (για κείμενο) και του %d (για αριθμούς):

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
# -*- coding: utf-8 -*-

alphabet = ['γ', 'ω', 'ζ', 'χ', 'β', 'α', 'λ', 'ρ', 'ν', 'μ', 'ο', 'π', 'υ', 'σ', 'φ', 'τ', 'δ', 'η', 'ε', 'θ', 'κ', 'ι', 'ξ', 'ψ' ]

print("Έχω %d γράμματα!" % (len(alphabet)))

print("Τα γράμματα είναι: %s" % (', '.join(alphabet)))

print('Θα ταξινομήσω τη λίστα μου τώρα.')
alphabet.sort()

print("Η ταξινομημένη λίστα μου είναι: %s" % (', '.join(alphabet)))


Σημείωση: Αυτό που προτείνω δουλεύει σε python3 και python 2.6:
Κώδικας: Επιλογή όλων
$ python moo.py
Έχω 24 γράμματα!
Τα γράμματα είναι: γ, ω, ζ, χ, β, α, λ, ρ, ν, μ, ο, π, υ, σ, φ, τ, δ, η, ε, θ, κ, ι, ξ, ψ
Θα ταξινομήσω τη λίστα μου τώρα.
Η ταξινομημένη λίστα μου είναι: α, β, γ, δ, ε, ζ, η, θ, ι, κ, λ, μ, ν, ξ, ο, π, ρ, σ, τ, υ, φ, χ, ψ, ω

$ python3 moo.py
Έχω 24 γράμματα!
Τα γράμματα είναι: γ, ω, ζ, χ, β, α, λ, ρ, ν, μ, ο, π, υ, σ, φ, τ, δ, η, ε, θ, κ, ι, ξ, ψ
Θα ταξινομήσω τη λίστα μου τώρα.
Η ταξινομημένη λίστα μου είναι: α, β, γ, δ, ε, ζ, η, θ, ι, κ, λ, μ, ν, ξ, ο, π, ρ, σ, τ, υ, φ, χ, ψ, ω
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό malos » 25 Ιουν 2009, 14:32

Ευχαριστώ. Ξεκαθαρίζουν τα πράγματα. Τώρα είναι ότι πρέπει για επανάληψη στα πρώτα μαθήματα :D
Το join είναι μέθοδος έτσι ;
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1221
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό medigeek » 25 Ιουν 2009, 14:48

Απ'ό,τι βλέπω, έτσι το λένε :) http://www.google.com/search?q=python%20join%20method

Edit:
Ένα πιο εξειδικευμένο παράδειγμα για τη χρήση του join θα βρεις εδώ: http://diveintopython.org/native_data_t ... lists.html
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Επόμενο

Επιστροφή στο Μαθήματα python

cron