Δημοσιεύτηκε: 30 Μάιος 2009, 12:10
Υποβάλλω το πρώτο μισό του κεφαλαίου 11, για έλεγχο :
Και η μετάφραση του:
- Κώδικας: Επιλογή όλων
Python en:Data Structures
Introduction
Data structures are basically just that - they are structures which can hold some data
together. In other words, they are used to store a collection of related data.
There are four built-in data structures in Python - list, tuple, dictionary and set. We will see
how to use each of them and how they make life easier for us.
List
A list is a data structure that holds an ordered collection of items i.e. you can store a
sequence of items in a list. This is easy to imagine if you can think of a shopping list where
you have a list of items to buy, except that you probably have each item on a separate line
in your shopping list whereas in Python you put commas in between them.
The list of items should be enclosed in square brackets so that Python understands that you
are specifying a list. Once you have created a list, you can add, remove or search for items
in the list. Since we can add and remove items, we say that a list is a mutable data type i.e.
this type can be altered.
Quick Introduction To Objects And Classes
Although I've been generally delaying the discussion of objects and classes till now, a little
explanation is needed right now so that you can understand lists better. We will explore this
topic in detail later in its own chapter.
A list is an example of usage of objects and classes. When we use a variable i and assign a
value to it, say integer 5 to it, you can think of it as creating an object (i.e. instance) i of
class (i.e. type) int. In fact, you can read help(int) to understand this better.
A class can also have methods i.e. functions defined for use with respect to that class only.
You can use these pieces of functionality only when you have an object of that class. For
example, Python provides an append method for the list class which allows you to add an
item to the end of the list. For example, mylist.append('an item') will add that string to
the list mylist. Note the use of dotted notation for accessing methods of the objects.
A class can also have fields which are nothing but variables defined for use with respect to
that class only. You can use these variables/names only when you have an object of that
class. Fields are also accessed by the dotted notation, for example, mylist.field.
Example:
#!/usr/bin/python
# Filename: using_list.py
# This is my shopping list
shoplist = ['apple', 'mango', 'carrot', 'banana']
print('I have', len(shoplist), 'items to purchase.')
print('These items are:', end=' ')
Python en:Data Structures 63
for item in shoplist:
print(item, end=' ')
print('\nI also have to buy rice.')
shoplist.append('rice')
print('My shopping list is now', shoplist)
print('I will sort my list now')
shoplist.sort()
print('Sorted shopping list is', shoplist)
print('The first item I will buy is', shoplist[0])
olditem = shoplist[0]
del shoplist[0]
print('I bought the', olditem)
print('My shopping list is now', shoplist)
Output:
$ python using_list.py
I have 4 items to purchase.
These items are: apple mango carrot banana
I also have to buy rice.
My shopping list is now ['apple', 'mango', 'carrot', 'banana',
'rice']
I will sort my list now
Sorted shopping list is ['apple', 'banana', 'carrot', 'mango',
'rice']
The first item I will buy is apple
I bought the apple
My shopping list is now ['banana', 'carrot', 'mango', 'rice']
How It Works:
The variable shoplist is a shopping list for someone who is going to the market. In
shoplist, we only store strings of the names of the items to buy but you can add any kind
of object to a list including numbers and even other lists.
We have also used the for..in loop to iterate through the items of the list. By now, you
must have realised that a list is also a sequence. The speciality of sequences will be
discussed in a later section.
Notice the use of the end keyword argument to the print function to indicate that we
want to end the output with a space instead of the usual line break.
Next, we add an item to the list using the append method of the list object, as already
discussed before. Then, we check that the item has been indeed added to the list by
printing the contents of the list by simply passing the list to the print statement which
prints it neatly.
Then, we sort the list by using the sort method of the list. It is important to understand
that this method affects the list itself and does not return a modified list - this is different
from the way strings work. This is what we mean by saying that lists are mutable and that
Python en:Data Structures 64
strings are immutable.
Next, when we finish buying an item in the market, we want to remove it from the list. We
achieve this by using the del statement. Here, we mention which item of the list we want
to remove and the del statement removes it from the list for us. We specify that we want to
remove the first item from the list and hence we use del shoplist[0] (remember that
Python starts counting from 0).
If you want to know all the methods defined by the list object, see help(list) for details.
Tuple
Tuples are used to hold together multiple objects. Think of them as similar to lists, but
without the extensive functionality that the list class gives you. One major feature of tuples
is that they are immutable like strings i.e. you cannot modify tuples.
Tuples are defined by specifying items separated by commas within an optional pair of
parentheses.
Tuples are usually used in cases where a statement or a user-defined function can safely
assume that the collection of values i.e. the tuple of values used will not change.
Example:
#!/usr/bin/python
# Filename: using_tuple.py
zoo = ('python', 'elephant', 'penguin') # remember the parentheses are
optional
print('Number of animals in the zoo is', len(zoo))
new_zoo = ('monkey', 'camel', zoo)
print('Number of cages in the new zoo is', len(new_zoo))
print('All animals in new zoo are', new_zoo)
print('Animals brought from old zoo are', new_zoo[2])
print('Last animal brought from old zoo is', new_zoo[2][2])
print('Number of animals in the new zoo is',
len(new_zoo)-1+len(new_zoo[2]))
Output:
$ python using_tuple.py
Number of animals in the zoo is 3
Number of cages in the new zoo is 3
All animals in new zoo are ('monkey', 'camel', ('python',
'elephant', 'penguin'))
Animals brought from old zoo are ('python', 'elephant', 'penguin')
Last animal brought from old zoo is penguin
Number of animals in the new zoo is 5
How It Works:
The variable zoo refers to a tuple of items. We see that the len function can be used to get
the length of the tuple. This also indicates that a tuple is a sequence as well.
Python en:Data Structures 65
We are now shifting these animals to a new zoo since the old zoo is being closed. Therefore,
the new_zoo tuple contains some animals which are already there along with the animals
brought over from the old zoo. Back to reality, note that a tuple within a tuple does not lose
its identity.
We can access the items in the tuple by specifying the item's position within a pair of
square brackets just like we did for lists. This is called the indexing operator. We access the
third item in new_zoo by specifying new_zoo[2] and we access the third item within the
third item in the new_zoo tuple by specifying new_zoo[2][2]. This is pretty simple once
you've understood the idiom.
Parentheses
Although the parentheses is optional, I prefer always having them to make it obvious
that it is a tuple, especially because it avoids ambiguity. For example, print(1,2,3)
and print( (1,2,3) ) mean two different things - the former prints three numbers
whereas the latter prints a tuple (which contains three numbers).
Tuple with 0 or 1 items
An empty tuple is constructed by an empty pair of parentheses such as myempty = ().
However, a tuple with a single item is not so simple. You have to specify it using a
comma following the first (and only) item so that Python can differentiate between a
tuple and a pair of parentheses surrounding the object in an expression i.e. you have to
specify singleton = (2 , ) if you mean you want a tuple containing the item 2.
Note for Perl programmers
A list within a list does not lose its identity i.e. lists are not flattened as in Perl. The
same applies to a tuple within a tuple, or a tuple within a list, or a list within a tuple,
etc. As far as Python is concerned, they are just objects stored using another object,
that's all.
Dictionary
A dictionary is like an address-book where you can find the address or contact details of a
person by knowing only his/her name i.e. we associate keys (name) with values (details).
Note that the key must be unique just like you cannot find out the correct information if you
have two persons with the exact same name.
Note that you can use only immutable objects (like strings) for the keys of a dictionary but
you can use either immutable or mutable objects for the values of the dictionary. This
basically translates to say that you should use only simple objects for keys.
Pairs of keys and values are specified in a dictionary by using the notation d = {key1 :
value1, key2 : value2 }. Notice that the key-value pairs are separated by a colon and the
pairs are separated themselves by commas and all this is enclosed in a pair of curly braces.
Remember that key-value pairs in a dictionary are not ordered in any manner. If you want a
particular order, then you will have to sort them yourself before using it.
The dictionaries that you will be using are instances/objects of the dict class.
Example:
#!/usr/bin/python
# Filename: using_dict.py
Python en:Data Structures 66
# 'ab' is short for 'a'ddress'b'ook
ab = { 'Swaroop' : 'swaroop@swaroopch.com',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}
print("Swaroop's address is", ab['Swaroop'])
# Deleting a key-value pair
del ab['Spammer']
print('\nThere are {0} contacts in the address-book\n'.format(len(ab)))
for name, address in ab.items():
print('Contact {0} at {1}'.format(name, address))
# Adding a key-value pair
ab['Guido'] = 'guido@python.org'
if 'Guido' in ab: # OR ab.has_key('Guido')
print("\nGuido's address is", ab['Guido'])
Output:
$ python using_dict.py
Swaroop's address is swaroop@swaroopch.com
There are 3 contacts in the address-book
Contact Swaroop at swaroop@swaroopch.com
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Guido's address is guido@python.org
How It Works:
We create the dictionary ab using the notation already discussed. We then access key-value
pairs by specifying the key using the indexing operator as discussed in the context of lists
and tuples. Observe the simple syntax.
We can delete key-value pairs using our old friend - the del statement. We simply specify
the dictionary and the indexing operator for the key to be removed and pass it to the del
statement. There is no need to know the value corresponding to the key for this operation.
Next, we access each key-value pair of the dictionary using the items method of the
dictionary which returns a list of tuples where each tuple contains a pair of items - the key
followed by the value. We retrieve this pair and assign it to the variables name and address
correspondingly for each pair using the for..in loop and then print these values in the
Python en:Data Structures 67
for-block.
We can add new key-value pairs by simply using the indexing operator to access a key and
assign that value, as we have done for Guido in the above case.
We can check if a key-value pair exists using the in operator or even the has_key method
of the dict class. You can see the documentation for the complete list of methods of the
dict class using help(dict).
Keyword Arguments and Dictionaries
On a different note, if you have used keyword arguments in your functions, you have
already used dictionaries! Just think about it - the key-value pair is specified by you in
the parameter list of the function definition and when you access variables within your
function, it is just a key access of a dictionary (which is called the symbol table in
compiler design terminology).
Και η μετάφραση του:
- Κώδικας: Επιλογή όλων
Δομές δεδομένων(Data structures)
Εισαγωγή
Οι δομές δεδομένων είναι αυτό που λέει το όνομά τους δηλ. είναι δομές που μπορούν να κρατήσουν μαζί μερικά δεδομένα. Με άλλα λόγια χρησιμοποιούνται για να αποθηκεύουν δεδομένα που έχουν σχέση μεταξύ τους. Υπάρχουν τέσσερις ενσωματωμένες δομές δεδομένων στη Python, οι λίστες, οι πλειάδες, τα λεξικά και τα σύνολα. Θα δούμε πως να τα χρησιμοποιούμε και πως μας κάνουν τη ζωή ευκολότερη.
Λίστα
Η λίστα είναι μια δομή δεδομένων που συγκρατεί μια διατεταγμένη συλλογή στοιχείων, δηλ. μπορείτε να αποθηκεύσετε μια ακολουθία(sequence) αντικειμένων στη λίστα. Αυτό είναι εύκολο να το φανταστείτε αν σκεφτείτε μια λίστα για αγορές, όπου έχετε μια λίστα με αντικείμενα που πρέπει να αγοράσετε, εκτός αυτού πιθανόν έχετε κάθε στοιχείο σε διαφορετική γραμμή στη λίστα αγορών σας, αντιθέτως στη Python τοποθετείτε κόμματα ανάμεσα στα στοιχεία.
Η λίστα των στοιχείων πρέπει να κλείνεται σε αγκύλες έτσι ώστε να καταλαβαίνει η Python ότι καθορίζετε μια λίστα. Αν έχετε δημιουργήσει μια λίστα μια φορά μπορείτε να προσθέσετε, να μετακινήσετε ή να ψάξετε για στοιχεία σ' αυτή τη λίστα. Από τη στιγμή που μπορούμε να προσθέσουμε και να μετακινήσουμε στοιχεία, λέμε ότι η λίστα είναι ένας μεταβλητός τύπος δεδομένων(mutable data type) δηλ. αυτός ο τύπος μπορεί να αλλαχθεί.
Γρήγορη εισαγωγή στα αντικείμενα(objects) και τις κλάσεις(classes)
Αν και έχουμε αναβάλει μέχρι τώρα τη συζήτηση για τα αντικείμενα και τις κλάσεις, μια μικρή επεξήγηση απαιτείται ακριβώς τώρα για να καταλάβετε καλύτερα τις λίστες. Θα εξερευνήσουμε αυτό το θέμα αργότερα σε δικό του κεφάλαιο.
Η λίστα είναι ένα παράδειγμα χρήσης αντικειμένων και κλάσεων. Όταν χρησιμοποιούμε τη μεταβλητή i και της ορίζουμε μια τιμή, ας πούμε τον ακέραιο αριθμό 5, αυτό μπορούμε να το σκεφτούμε σαν τη δημιουργία ενός αντικειμένου (δηλ. υπόστασης(instance)) i της κλάσης(δηλ. τύπου(type)) int. Στην πραγματικότητα μπορείτε να διαβάσετε τη βοήθεια(int) (help(int)) για να το καταλάβετε καλύτερα.
Mια τάξη μπορεί επίσης να έχει μεθόδους(methods) δηλ. συναρτήσεις, που ορίστηκαν για χρήση που έχει σχέση μόνο με αυτή την τάξη. Μπορείτε να χρησιμοποιήσετε αυτά τα μέρη λειτουργικότητας μόνο όταν έχετε ένα αντικείμενο σε αυτή την κλάση. Για παράδειγμα η Python παρέχει μια μέθοδο προσάρτησης για την τάξη της λίστας, που σας επιτρέπει να προσθέσετε ένα αντικείμενο στο τέλος της λίστας. Για παράδειγμα, το mylist.append('an item') θα προσθέσει αυτή τη συμβολοσειρά στο τέλος του mylist. Σημειώστε τη χρήση του συμβολισμού με τελείες για να εισαχθούν οι μέθοδοι των αντικειμένων.
Μια τάξη μπορεί επίσης να έχει πεδία(fields), που δεν είναι τίποτα άλλο παρά μεταβλητές που ορίστηκαν για χρήση που έχει σχέση μόνο με αυτή την τάξη. Μπορείτε να χρησιμοποιήσετε αυτές τις μεταβλητές/ονομασίες μόνο όταν έχετε ένα αντικείμενο αυτής της τάξης. Τα πεδία επίσης εισάγονται με συμβολισμό με τελείες, για παράδειγμα, mylist.field.
Παράδειγμα:
#!/usr/bin/python
# Filename: using_list.py
# Αυτή είναι η λίστα αγορών μου
shoplist = ['μήλο', 'μάνγκο', 'καρότο', 'μπανάνα']
print('Εχω', len(shoplist), 'στοιχεία να πληρώσω.')
print('Αυτά τα στοιχεία είναι:', end=' ')
print(item, end=' ')
print('\nΕπίσης πρέπει να αγοράσω ρύζι.')
shoplist.append('ρύζι')
print('Η λίστα αγορών μου τώρα είναι', shoplist)
print('Θα ταξινομήσω τη λίστα μου τώρα')
shoplist.sort()
print('Sorted shopping list is', shoplist)
print('Το πρώτο στοιχείο που θα αγοράσω είναι', shoplist[0])
olditem = shoplist[0]
del shoplist[0]
print('Αγόρασα το', olditem)
print('Ηλίστα αγορών μου τώρα είναι', shoplist)
Έξοδος:
$ python using_list.py
Έχω 4 στοιχεία να πληρώσω.
Αυτά τα στοιχεία είναι: μήλο μάνγκο καρότο μπανάνα
Έπίσης πρέπει να πληρώσω το ρύζι.
Η λίστα αγορών μου τώρα είναι ['μήλο', 'μάνγκο', 'καρότο', 'μπανάνα',
'ρύζι']
Θα ταξινομήσω τη λίστα μου τώρα
Η ταξινομημένη λίστα αγορών είναι ['μήλο', 'μπανάνα', 'καρότο', 'μάνγκο',
'ρύζι']
Το πρώτο στοιχείο που θα αγοράσω είναι το μήλο
Αγόρασα το μήλο
Η λίστα αγορών μου τώρα είναι['μπανάνα', 'καρότο', 'μάνγκο', 'ρύζι' ]
Πως δουλεύει:
H μεταβλητή shoplist είναι μια λίστα αγορών για κάποιον που πηγαίνει στην αγορά. Στη shoplist αποθηκεύουμε συμβολοσειρές των ονομάτων των αντικειμένων που θα αγοράσουμε, αλλά δεν μπορείτε να προσθέσετε κανένα είδος αντικειμένου στη λίστα συμπεριλαμβανομένων αριθμών ή ακόμα και άλλες λίστες.
Επίσης έχουμε χρησιμοποιήσει το βρόχο for...in για να επανελέξουμε τα αντικείμενα της λίστας. Μέχρι τώρα, πρέπει να έχετε καταλάβει ότι η λίστα είναι επίσης μια ακολουθία. Η ιδιαιτερότητα των ακολουθιών θα συζητηθεί σε επόμενο κεφάλαιο. Παρατηρήστε πως χρησιμοποιούμε τη λέξη-κλειδί όρισμα end στη συνάρτηση print, για να δείξουμε ότι θέλουμε να τελειώσουμε (end) την έξοδο με ένα διάστημα(space) αντί της συνηθισμένης γραμμής διάλλειμα(break).Κατόπιν προσθέτουμε ένα στοιχείο στη λίστα χρησιμοποιώντας τη μέθοδο προσάρτησης(append method) της λίστας του αντικειμένου(list object), όπως ήδη συζητήσαμε. Τότε, παρατηρούμε ότι το στοιχείο έχει πραγματικά προστεθεί στη λίστα, τυπώνοντας τα περιεχόμενα της λίστας, απλά περνώντας τη λίστα στην εντολή print και απλά την τυπώνει.
Τότε, ταξινομούμε τη λίστα χρησιμοποιώντας τη μέθοδο ταξινόμησης(sort method) της λίστας. Είναι σημαντικό να καταλάβετε ότι αυτή η μέθοδος επηρεάζει την ίδια τη λίστα και δεν επιστρέφει μια τροποποιημένη λίστα, αυτή είναι η διαφορά από τον τρόπο που δουλεύουν οι συμβολοσειρές. Αυτό είναι που εννοούμε λέγοντας ότι οι λίστες είναι μεταβλητές(mutable) και οι συμβολοσειρές αμετάβλητες(immutable). Κατόπιν, όταν τελειώνουμε αγοράζοντας ένα στοιχείο στην αγορά, θέλουμε να το μετακινήσουμε από τη λίστα. Αυτό το επιτυγχάνουμε χρησιμοποιώντας την εντολή del. Εδώ αναφέρουμε ποιο στοιχείο της λίστας θέλουμε να μετακινήσουμε και η εντολή del το μετακινεί από τη λίστα για μας. Καθορίζουμε ότι θέλουμε να μετακινήσουμε το πρώτο αντικείμενο από τη λίστα και έτσι χρησιμοποιούμε την del shoplist[0] (θυμηθείτε ότι η Python αρχίζει να μετρά από το μηδέν).Εάν θέλετε να γνωρίσετε όλες τις μεθόδους που ορίζονται από τη λίστα αντικειμένου, κοιτάξτε το help(list) για λεπτομέρειες.
Πλειάδα
Οι πλειάδες χρησιμοποιούνται για να συγκρατήσουν μαζί πολλαπλά αντικείμενα. Σκεφτείτε τα σαν παρόμοια με τις λίστες, αλλά χωρίς την εκτεταμένη λειτουργικότητα που η κλάση της λίστας σας δίνει. Ένα κύριο χαρακτηριστικό των πλειάδων είναι ότι είναι αμετάβλητη όπως οι συμβολοσειρές δηλ. δεν μπορείτε να τροποποιήσετε πλειάδες.
Οι πλειάδες ορίζονται καθορίζοντας στοιχεία που διαχωρίζονται με κόμματα, μέσα σε ένα προαιρετικό ζευγάρι παρενθέσεων. Οι πλειάδες χρησιμοποιούνται, συνήθως, στις περιπτώσεις όπου μια εντολή ή μια συνάρτηση οριζόμενη από το χρήστη, μπορεί με ασφάλεια να θεωρήσει ότι η συλλογή των τιμών δηλ. η πλειάδα των τιμών που χρησιμοποιούνται δεν θα αλλάξει.
Παράδειγμα:
#!/usr/bin/python
# Filename: using_tuple.py
zoo = ('πύθωνας', 'ελέφαντας', 'πιγκουίνος') # θυμηθείτε οι παρενθέσεις είναι προαιρετικές
print('Ο αριθμός των ζώων στο ζωολογικό κήπο είναι', len(zoo))
new_zoo = ('μαϊμού', 'καμήλα', zoo)
print('Ο αριθμός των κλουβιών στο νέο ζωολογικό κήπο είναι', len(new_zoo))
print('Όλα τα ζώα στο νέο ζωολογικό κήπο είναι', new_zoo)
print('Όλα τα ζώα που έφεραν από τον παλιό ζωολογικό κήπο είναι', new_zoo[2])
print('Το τελευταίο ζώο που έφεραν από τον παλιό ζωολογικό κήπο είναι', new_zoo[2][2])
print('Ο αριθμός των ζώων που είναι στο νέο ζωολογικό κήπο',
len(new_zoo)-1+len(new_zoo[2]))
Έξοδος:
$ python using_tuple.py
Ο αριθμός των ζώων στο ζωολογικό κήπο είναι 3
Ο αριθμός των κλουβιών στο νέο ζωολογικό κήπο είναι 3
Όλα τα ζώα στο νέο ζωολογικό κήπο είναι ('μαϊμού', 'καμήλα', ('πύθωνας',
'ελέφαντας', 'πιγκουίνος'))
Τα ζώα που έφεραν από τον παλιό ζωολογικό κήπο είναι ('πύθωνας', 'ελέφαντας', 'πιγκουίνος')
Το τελευταίο ζώο που έφεραν από τον παλιό ζωολογικό κήπο είναι πιγκουίνος
Ο αριθμός των ζώων στο νέο ζωολογικό κήπο είναι 5
Πως δουλεύει:
Η μεταβλητή zoo αναφέρεται σε μια πλειάδα στοιχείων. Βλέπουμε ότι η συνάρτηση len μπορεί να χρησιμοποιηθεί για να πάρει το μήκος της πλειάδας. Αυτό επίσης δείχνει ότι η πλειάδα είναι και μια ακολουθία.
Τώρα μετακινούμε αυτά τα ζώα σε ένα νέο ζωολογικό κήπο επειδή ο παλιός κλείνει. Συνεπώς, η πλειάδα the new_zoo περιέχει κάποια ζώα που βρίσκονται ήδη μαζί με τα ζώα που έφεραν από τον παλιό ζωολογικό κήπο. Πίσω στην πραγματικότητα, σημειώστε ότι μια πλειάδα μέσα σε μια πλειάδα δεν χάνει την ταυτότητά της.
Μπορούμε να εισάγουμε τα στοιχεία μέσα στην πλειάδα, καθορίζοντας τη θέση του στοιχείου μέσα σε ένα ζευγάρι αγκύλες, ακριβώς όπως κάναμε για τις λίστες. Αυτό ονομάζεται τελεστής ευρετηρίασης(indexing operator). Eισάγουμε το τρίτο στοιχείο μέσα στο new_zoo καθορίζοντας new_zoo[2] και εισάγουμε το τρίτο στοιχείο μέσα στο τρίτο στοιχείο στην πλειάδα new_zoo καθορίζοντας new_zoo[2][2]. Aυτό είναι πολύ απλό άπαξ και έχετε καταλάβει το ιδίωμα.
Παρενθέσεις
Αν και οι παρενθέσεις είναι προαιρετικές, εγώ προτιμώ πάντα να τις έχω για να κάνω φανερό ότι αυτή είναι μια πλειάδα, ειδικά επειδή αποφεύγεις την ασάφεια. Για παράδειγμα, print(1,2,3) και print( (1,2,3) ) σημαίνουν δυο διαφορετικά πράγματα- το μεν τυπώνει τρεις αριθμούς, αντίθετα το δε τυπώνει μια πλειάδα(η οποία περιέχει τρεις αριθμούς).
Πλειάδα με 0 ή 1 στοιχεία
Μια άδεια πλειάδα δομείται από ένα άδειο ζευγάρι παρενθέσεων όπως myempty = (). Πάντως, μια πλειάδα με ένα μόνο στοιχείο δεν είναι δεν είναι τόσο απλή. Πρέπει να το καθορίσετε χρησιμοποιώντας ένα κόμμα ακολουθώντας το πρώτο και μοναδικό στοιχείο, έτσι ώστε η Python να μπορεί να διαφοροποιεί μια πλειάδα από ένα ζευγάρι παρενθέσεων που παρεμβάλλουν το αντικείμενο σε μια έκφραση δηλ. πρέπει να καθορίζετε singleton = (2, ), εάν εννοείτε ότι θέλετε μια πλειάδα που περιέχει το στοχείο 2.
Σημείωση για τους προγραμματιστές της Perl
Μια λίστα μέσα σε μια λίστα δεν χάνει την ταυτότητά της δηλ. οι λίστες δεν ισοπεδώνονται όπως στην Perl. Το ίδιο ισχύει για μια πλειάδα μέσα σε μια πλειάδα, ή για μια πλειάδα μέσα σε μια λίστα, ή για μια λίστα μέσα σε μια πλειάδα, κ.τ.λ. Σε ότι αφορά την Python, αυτά είναι μόνο αντικείμενα που αποθηκεύονται χρησιμοποιώντας ένα άλλο αντικείμενο, κι αυτό είναι όλο.
Λεξικό(Dictionary)
Ένα λεξικό είναι σαν ένα τηλεφωνικό κατάλογο όπου μπορείτε να βρείτε τη διεύθυνση ή να φέρετε σε επαφή λεπτομέρειες για ένα άτομο, γνωρίζοντας μόνο το όνομά του/της δηλ. συσχετίζουμε κλειδιά (ονομασία) με τιμές(λεπτομέρειες). Σημειώστε ότι μπορείτε να χρησιμοποιήσετε μόνο αμετάβλητα αντικείμενα (όπως συμβολοσειρές) για τα κλειδιά του λεξικού, αλλά μπορείτε να χρησιμοποιήσετε είτε αμετάβλητα είτε μεταβλητά αντικείμενα για τις τιμές του λεξικού. Αυτό κυρίως ερμηνεύει για να πει ότι πρέπει να χρησιμοποιείτε μόνο απλά αντικείμενα για κλειδιά.
Ζευγάρια κλειδιών και τιμών καθορίζονται στο λεξικό χρησιμοποιώντας το συμβολισμό d = {key1 : value1, key2 : value2 }. Παρατηρήστε ότι τα ζευγάρια κλειδί-τιμή διαχωρίζονται με διπλή τελεία και τα ζευγάρια διαχωρίζονται μεταξύ τους με κόμματα και όλα αυτά περικλείονται σε ένα ζευγάρι { }.
Θυμηθείτε ότι τα ζευγάρια κλειδί-τιμή σε ένα λεξικό δεν εντέλλονται με κανένα τρόπο. Αν θέλετε μια ειδική εντολή, τότε πρέπει να τα ταξινομήσετε από μόνοι σας πριν τα χρησιμοποιήσετε. Τα λεξικά που θα χρησιμοποιείτε είναι υποστάσεις/αντικείμενα της τάξης dict.
Παράδειγμα:
#!/usr/bin/python
# Filename: using_dict.py
# 'ab' is short for 'a'ddress'b'ook
ab = { 'Swaroop' : 'swaroop@swaroopch.com',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}
print("Swaroop's address is", ab['Swaroop'])
# Deleting a key-value pair
del ab['Spammer']
print('\nThere are {0} contacts in the address-book\n'.format(len(ab)))
for name, address in ab.items():
print('Contact {0} at {1}'.format(name, address))
# Adding a key-value pair
ab['Guido'] = 'guido@python.org'
if 'Guido' in ab: # OR ab.has_key('Guido')
print("\nGuido's address is", ab['Guido'])
Έξοδος:
$ python using_dict.py
Swaroop's address is swaroop@swaroopch.com
There are 3 contacts in the address-book
Contact Swaroop at swaroop@swaroopch.com
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Guido's address is guido@python.org
Πως δουλεύει:
Δημιουργούμε το λεξικό ab χρησιμοποιώντας το συμβολισμό που ήδη συζητήσαμε. Τότε εισάγουμε ζευγάρια κλειδί-τιμή καθορίζοντας το κλειδί,χρησιμοποιώντας τον τελεστή ευρετηρίασης(indexing operator) όπως συζητήθηκε στο απόσπασμα των λιστών και πλειάδων. Παρατηρήστε την απλή σύνταξη.
Μπορούμε να διαγράψουμε τα ζευγάρια κλειδί-τιμή χρησιμοποιώντας τον παλιό μας φίλο, την εντολή del. Eμείς απλά καθορίζουμε το λεξικό και ο τελεστής ευρετηρίασης για το κλειδί να μετακινηθεί και το περνάει στην εντολή del. Δεν είναι αναγκαίο να γνωρίζει την τιμή που αντιστοιχεί στο κλειδί για αυτή τη λειτουργία.
Έπειτα, εισάγουμε κάθε ζευγάρι κλειδί-τιμή του λεξικού χρησιμοποιώντας τη μέθοδο στοιχείων του λεξικού, η οποία επιστρέφει μια λίστα πλειάδων, όπου κάθε πλειάδα περιέχει ένα ζευγάρι στοιχείων- το κλειδί ακολουθείται από την τιμή. Ανακτούμε αυτό το ζευγάρι και το εκχωρούμε στις μεταβλητές name(ονομασία) και address(διεύθυνση), αντιστοίχως για κάθε ζευγάρι, χρησιμοποιώντας το βρόχο for...in και μετά τυπώνει αυτές τις τιμές στην πλοκάδα.
Μπορούμε να προσθέσουμε νέα ζευγάρια κλειδί-τιμή, απλά χρησιμοποιώντας τον τελεστή ευρετηρίασης, για να εισάγουμε ένα κλειδί και να εκχωρήσουμε τιμή, όπως έχουμε κάνει για το Guido στην ανωτέρω περίπτωση. Μπορούμε να ελέγξουμε εάν ένα ζευγάρι κλειδί-τιμή υπάρχει, χρησιμοποιώντας τον τελεστή in, ή ακόμα και τη μέθοδο has_key της τάξης dict. Μπορείτε να δείτε την τεκμηρίωση για ολόκληρη τη λίστα των μεθόδων της τάξης dict χρησιμοποιώντας τη help(dict).
Ορίσματα με λέξεις κλειδιά και λεξικά
Σε μια διαφορετική νότα, εάν έχετε χρησιμοποιήσει ορίσματα με λέξεις κλειδιά στις συναρτήσεις σας, τότε έχετε ήδη χρησιμοποιήσει λεξικά! Σκεφτείτε μόνο αυτό, το ζευγάρι κλειδί-τιμή καθορίζεται από εσάς στη λίστα της παραμέτρου του ορισμού της συνάρτησης και όταν εισάγετε μεταβλητές μέσα στη συνάρτησή σας, αυτό είναι είσοδος κλειδιού ενός λεξικού(που ονομάζεται συμβολοπίνακας στην ορολογία του σχεδιαστικού μεταγλωττιστή.