Στην Python, μια πλειάδα είναι μια αμετάβλητη συλλογή στοιχείων σε σειρά.
Όπως οι περισσότερες συλλογές, οι tuples μπορούν να περιέχουν οποιονδήποτε τύπο δεδομένων (ή πολλαπλούς), ακόμη και άλλες tuples.
Οι πλειάδες υποστηρίζουν όλες τις συνήθεις πράξεις ακολουθιών, αλλά δεν υποστηρίζουν τις πράξεις μεταβλητών ακολουθιών.
Μπορεί να γίνει επανάληψη πάνω στα στοιχεία μιας πλειάδας χρησιμοποιώντας τη δομή for item in <tuple>.
Αν χρειάζεσαι και τη θέση και την τιμή του στοιχείου, μπορείς να χρησιμοποιήσεις το for index, item in enumerate(<tuple>).
Όπως σε κάθε ακολουθία, μπορείς να προσπελάσεις τα στοιχεία μέσα σε tuples με σημειογραφία αγκυλών, χρησιμοποιώντας έναν αριθμό 0-based index από τα αριστερά ή έναν αριθμό -1-based index από τα δεξιά.
Οι πλειάδες μπορούν επίσης να αντιγραφούν ολόκληρες ή εν μέρει χρησιμοποιώντας τη σημειογραφία slice (<tuple>[<start>:<stop>:<step>]).
Οι πλειάδες μπορούν να σχηματιστούν με πολλούς τρόπους, είτε με τον κατασκευαστή κλάσης tuple(<iterable>) είτε με τη δήλωση του literal tuple.
tuple() άδειου ή με ένα iterable:>>> no_elements = tuple()
()
# The constructor *requires* an iterable, so single elements must be passed in a list or another tuple.
>>> one_element = tuple([16])
(16,)
Οι συμβολοσειρές είναι iterable, οπότε η χρήση μιας μεμονωμένης str ως ορίσματος στον κατασκευαστή tuple() μπορεί να έχει απροσδόκητα αποτελέσματα:
# String elements (characters) are iterated through and added to the tuple
>>> multiple_elements_string = tuple("Timbuktu")
('T', 'i', 'm', 'b', 'u', 'k', 't', 'u')
Στα μεμονωμένα iterables, τα στοιχεία προστίθενται ένα ένα:
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> multiple_elements_set = tuple({2, 3, 5, 7, 11})
(2,3,5,7,11)
Επειδή ο κατασκευαστής tuple(<iterable>) δέχεται ως ορίσματα μόνο iterables (ή τίποτα), είναι πολύ πιο εύκολο να δημιουργήσεις
μια πλειάδα με ένα στοιχείο μέσω της μεθόδου literal.
>>> no_elements = ()
()
>>> one_element = ("Guava",)
("Guava",)
Ως στοιχεία tuple μπορούν να συμπεριληφθούν εμφωλευμένες δομές δεδομένων, ακόμη και άλλες tuples:
>>> nested_data_structures = ({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
>>> nested_data_structures_1 = (["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
(["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
Οι πλειάδες μπορούν να συνενωθούν με τον τελεστή συν +, ο οποίος ξεδιπλώνει κάθε tuple δημιουργώντας ένα νέο, συνδυασμένο tuple.
>>> new_via_concatenate = ("George", 5) + ("cat", "Tabby")
("George", 5, "cat", "Tabby")
#likewise, using the multiplication operator * is the equivalent of using + n times
>>> first_group = ("cat", "dog", "elephant")
>>> multiplied_group = first_group * 3
('cat', 'dog', 'elephant', 'cat', 'dog', 'elephant', 'cat', 'dog', 'elephant')
Τα στοιχεία μέσα σε ένα tuple μπορούν να προσπελαστούν με σημειογραφία αγκυλών, χρησιμοποιώντας έναν αριθμό 0-based index από τα αριστερά ή έναν αριθμό -1-based index από τα δεξιά.
student_info = ("Alyssa", "grade 3", "female", 8 )
#gender is at index 2 or index -2
>>> student_gender = student_info[2]
'female'
>>> student_gender = student_info[-2]
'female'
#name is at index 0 or index -4
>>> student_name = student_info[0]
Alyssa
>>> student_name = student_info[-4]
Alyssa
Μπορεί να γίνει επανάληψη πάνω στα στοιχεία μέσα σε ένα tuple με έναν βρόχο, χρησιμοποιώντας τη σύνταξη for item in <tuple>.
Αν χρειάζεσαι και τις θέσεις και τις τιμές, μπορείς να χρησιμοποιήσεις το for index, item in enumerate(<tuple>).
>>> student_info = ("Alyssa", "grade 3", "female", 8 )
>>> for item in student_info:
... print(item)
...
Alyssa
grade 3
female
8
>>> for index, item in enumerate(student_info):
... print("Index is: " + str(index) + ", value is: " + str(item) +".")
...
Index is: 0, value is: Alyssa.
Index is: 1, value is: grade 3.
Index is: 2, value is: female.
Index is: 3, value is: 8.
Ο τελεστής in μπορεί να χρησιμοποιηθεί για να ελέγξεις αν ένα στοιχείο ανήκει σε ένα tuple.
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> "Parrot" in multiple_elements_list
True
Η Azara και ο Rui είναι συμπαίκτες σε ένα κυνήγι θησαυρού με πειρατική θεματολογία. Ο ένας έχει μια λίστα με θησαυρούς μαζί με τις συντεταγμένες τους στον χάρτη, και ο άλλος μια λίστα με ονόματα τοποθεσιών μαζί με τις συντεταγμένες τους στον χάρτη. Τους έχουν επίσης δώσει κενούς χάρτες, όπου ένα σημείο εκκίνησης είναι σημειωμένο με τη φράση "ΕΙΣΑΙ ΕΔΩ".
| Η λίστα της Azara | Η λίστα του Rui | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Τα πράγματα όμως είναι λίγο ακατάστατα: οι συντεταγμένες της Azara φαίνεται να έχουν διαφορετική μορφή και σειρά από του Rui, και πρέπει να κοιτάζουν συνεχώς από τη μία λίστα στην άλλη για να καταλάβουν ποιοι θησαυροί πάνε με ποιες τοποθεσίες. Καθώς είναι νέοι pythonistas, ήρθαν σε σένα για βοήθεια, ώστε να γράψουν ένα μικρό πρόγραμμα (ουσιαστικά, ένα σύνολο συναρτήσεων) που θα οργανώσει καλύτερα τις πληροφορίες του κυνηγιού τους.
Υλοποίησε τη συνάρτηση get_coordinate(), που παίρνει ένα ζεύγος (treasure, coordinate) από τη λίστα της Azara και επιστρέφει μόνο τη συντεταγμένη του χάρτη που έχει εξαχθεί.
>>> get_coordinate(('Scrimshawed Whale Tooth', '2A'))
2A
Υλοποίησε τη συνάρτηση convert_coordinate(), που παίρνει μια συντεταγμένη με τη μορφή "2A" και επιστρέφει μια πλειάδα με τη μορφή ("2", "A").
>>> convert_coordinate("2A")
("2", "A")
Υλοποίησε τη συνάρτηση compare_records(), που παίρνει ένα ζεύγος (treasure, coordinate) και μια καταγραφή (location, coordinate, quadrant) και συγκρίνει τις συντεταγμένες της καθεμιάς.
Επίστρεψε True αν οι συντεταγμένες "ταιριάζουν", και False αν δεν ταιριάζουν.
Μορφοποίησε ξανά τις συντεταγμένες όπως χρειάζεται για σωστή σύγκριση.
>>> compare_records(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
False
>>> compare_records(('Model Ship in Large Bottle', '8A'), ('Harbor Managers Office', ('8', 'A'), 'purple'))
True
Υλοποίησε τη συνάρτηση create_record(), που παίρνει ένα ζεύγος (treasure, coordinate) από τη λίστα της Azara και μια καταγραφή (location, coordinate, quadrant) από τη λίστα του Rui και επιστρέφει (treasure, coordinate, location, coordinate, quadrant) αν οι συντεταγμένες ταιριάζουν.
Αν οι συντεταγμένες δεν ταιριάζουν, επίστρεψε τη συμβολοσειρά "not a match".
Μορφοποίησε ξανά τη συντεταγμένη όπως χρειάζεται για σωστή σύγκριση.
>>> create_record(('Brass Spyglass', '4B'), ('Abandoned Lighthouse', ('4', 'B'), 'Blue'))
('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')
>>> create_record(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
"not a match"
Καθάρισε τις συνδυασμένες καταγραφές της Azara και του Rui, ώστε να υπάρχει μόνο ένα σύνολο συντεταγμένων ανά καταγραφή. Φτιάξε μια αναφορά, για να βλέπουν μια λίστα με όλα όσα πρέπει να βάλουν στους χάρτες τους.
Υλοποίησε τη συνάρτηση clean_up(), που παίρνει μια πλειάδα από πλειάδες (όλα από τις δύο λίστες), διατρέχει με έναν βρόχο την εξωτερική πλειάδα, πετάει τις ανεπιθύμητες συντεταγμένες από κάθε εσωτερική πλειάδα και προσθέτει την καθεμία σε μια "αναφορά".
Μορφοποίησε και επέστρεψε την "αναφορά", ώστε να υπάρχει μία καθαρισμένη καταγραφή σε κάθε γραμμή.
>>> clean_up((('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue'), ('Vintage Pirate Hat', '7E', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange'), ('Crystal Crab', '6A', 'Old Schooner', ('6', 'A'), 'Purple')))
"""
('Brass Spyglass', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')\n
('Vintage Pirate Hat', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange')\n
('Crystal Crab', 'Old Schooner', ('6', 'A'), 'Purple')\n
"""
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.