Η list είναι μια μεταβλητή συλλογή στοιχείων σε σειρά.
Όπως οι περισσότερες συλλογές (δες τους ενσωματωμένους τύπους tuple, dict και set), οι λίστες μπορούν να περιέχουν αναφορά σε οποιονδήποτε (ή πολλαπλούς) τύπο δεδομένων, ακόμα και σε άλλες λίστες.
Οι λίστες μπορούν να αντιγραφούν ολόκληρες ή εν μέρει μέσω της σημειογραφίας τομής ή με τη χρήση της <list>.copy().
Όπως σε κάθε ακολουθία, τα στοιχεία μέσα στις lists προσδιορίζονται με 0-based index από τα αριστερά ή με -1-based index από τα δεξιά.
Οι λίστες υποστηρίζουν τόσο κοινές όσο και μεταβλητές πράξεις ακολουθίας, όπως min(<list>)/max(<list>), <list>.index(), <list>.append() και <list>.reverse().
Μπορείς να διατρέξεις τα στοιχεία μέσα σε μια list χρησιμοποιώντας τη δομή for item in <list>.
Η for index, item in enumerate(<list>) μπορεί να χρησιμοποιηθεί όταν χρειάζεσαι και τη θέση και την τιμή του στοιχείου.
Η Python παρέχει επίσης πολλές χρήσιμες μεθόδους λίστας για την εργασία με λίστες.
Μια επιλογή από αυτές τις list methods καλύπτεται παρακάτω.
Σημείωσε ότι όταν χειρίζεσαι μια list με μια list-method, τροποποιείς το αντικείμενο της λίστας που έχει περαστεί.
Αν δεν θέλεις να τροποποιήσεις την αρχική list, θα χρειαστεί τουλάχιστον να κάνεις ένα shallow copy της μέσω τομής ή <list>.copy().
Για να προσθέσεις ένα στοιχείο στο τέλος ή στη "δεξιά πλευρά" μιας υπάρχουσας λίστας, χρησιμοποίησε την <list>.append(<item>):
>>> numbers = [1, 2, 3]
>>> numbers.append(9)
>>> numbers
[1, 2, 3, 9]
Αντί να προσθέσεις στο τέλος, η <list>.insert() σου δίνει τη δυνατότητα να προσθέσεις το στοιχείο σε συγκεκριμένη θέση της λίστας.
Δέχεται 2 παραμέτρους:
<index> στην οποία θέλεις να εισαχθεί το στοιχείο.<item> που θα εισαχθεί.Σημείωση: Αν το index που δίνεται είναι 0, το στοιχείο θα προστεθεί στην αρχή ("αριστερή πλευρά") της list.
Αν το index που δίνεις είναι μεγαλύτερο από το τελικό index της list, το στοιχείο θα προστεθεί στην τελική θέση, το ίδιο δηλαδή με το να χρησιμοποιήσεις την <list>.append(<item>).
>>> numbers = [1, 2, 3]
>>> numbers.insert(0, -2)
>>> numbers
[-2, 1, 2, 3]
>>> numbers.insert(1, 0)
>>> numbers
[-2, 0, 1, 2, 3]
Η <list>.extend(<item>) μπορεί να χρησιμοποιηθεί για να συνδυάσεις μια υπάρχουσα λίστα με τα στοιχεία ενός άλλου iterable (για παράδειγμα, ενός set, tuple, str ή list).
Το iterable αποσυσκευάζεται και τα στοιχεία προστίθενται με τη σειρά (Η χρήση της <list>.append(<item>) σε αυτή την περίπτωση θα πρόσθετε ολόκληρο το iterable ως ένα μόνο στοιχείο.).
>>> numbers = [1, 2, 3]
>>> other_numbers = [5, 6, 7]
>>> numbers.extend(other_numbers)
>>> numbers
[1, 2, 3, 5, 6, 7]
>>> numbers.extend([8, 9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9]
>>> numbers.append([8,9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9, [8, 9]]
Για να διαγράψεις ένα στοιχείο από μια λίστα, χρησιμοποίησε την <list>.remove(<item>), περνώντας ως όρισμα το στοιχείο που θέλεις να αφαιρέσεις.
Η <list>.remove(<item>) θα πετάξει ένα ValueError αν το στοιχείο δεν υπάρχει στη list.
>>> numbers = [1, 2, 3]
>>> numbers.remove(2)
>>> numbers
[1, 3]
# Trying to remove a value that is not in the list throws a ValueError
>>> numbers.remove(0)
ValueError: list.remove(x): x not in list
Εναλλακτικά, η χρήση της μεθόδου <list>.pop(<index>) θα αφαιρέσει και θα return ένα στοιχείο, ώστε να το χρησιμοποιήσεις.
Η <list>.pop(<index>) δέχεται μία προαιρετική παράμετρο: το index του στοιχείου που θα αφαιρεθεί και θα επιστραφεί.
Αν το (προαιρετικό) όρισμα index δεν δοθεί, το τελευταίο στοιχείο της list θα αφαιρεθεί και θα επιστραφεί.
Αν το index που δίνεται είναι μεγαλύτερο από το index του τελευταίου στοιχείου, πετιέται ένα IndexError.
>>> numbers = [1, 2, 3]
>>> numbers.pop(0)
1
>>> numbers
[2, 3]
>>> numbers.pop()
3
>>> numbers
[2]
>>> numbers.pop(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
Όλα τα στοιχεία μπορούν να αφαιρεθούν από μια list με τη list.clear(). Δεν παίρνει καμία παράμετρο.
>>> numbers = [1, 2, 3]
>>> numbers.clear()
>>> numbers
[]
Η μέθοδος <list>.reverse() αντιστρέφει τη σειρά των στοιχείων επί τόπου.
>>> numbers = [1, 2, 3]
>>> numbers.reverse()
>>> numbers
[3, 2, 1]
Μια λίστα μπορεί να αναδιαταχθεί επί τόπου με τη βοήθεια της <list>.sort().
Η προεπιλεγμένη σειρά ταξινόμησης είναι αύξουσα από τα αριστερά.
Τα έγγραφα της Python προσφέρουν επιπλέον συμβουλές και τεχνικές για ταξινόμηση.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
# The default sort order is *ascending*.
>>> names.sort()
>>> names
["Bruce", "Natasha", "Thor", "Tony"]
Αν θέλεις φθίνουσα σειρά, πέρασε το όρισμα reverse=True:
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> names.sort(reverse=True)
>>> names
["Tony", "Thor", "Natasha", "Bruce"]
Σε περιπτώσεις όπου δεν θέλεις να τροποποιήσεις την αρχική λίστα, μπορείς να χρησιμοποιήσεις την ενσωματωμένη συνάρτηση sorted(<iterable>) για να πάρεις ένα ταξινομημένο αντίγραφο.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> sorted(names)
['Bruce', 'Natasha', 'Thor', 'Tony']
Ο αριθμός των εμφανίσεων ενός στοιχείου σε μια λίστα μπορεί να υπολογιστεί με τη βοήθεια της list.count(<item>).
Δέχεται ως όρισμα το item που θέλεις να μετρήσεις και επιστρέφει τον συνολικό αριθμό των φορών που εμφανίζεται αυτό το στοιχείο στη list.
>>> items = [1, 4, 7, 8, 2, 9, 2, 1, 1, 0, 4, 3]
>>> items.count(1)
3
Η <list>.index(<item>) επιστρέφει τον αριθμό index της πρώτης εμφάνισης ενός στοιχείου που της περνάς.
Αν δεν υπάρχουν εμφανίσεις, πετιέται ένα ValueError.
Αν δεν χρειάζεσαι την ακριβή θέση ενός στοιχείου, ο ενσωματωμένος τελεστής in είναι πιο αποδοτικός για να ελέγξεις αν μια λίστα περιέχει μια δεδομένη τιμή.
Οι θέσεις αριθμούνται ξεκινώντας από το 0 από τα αριστερά, οπότε η θέση του "πρώτου" στοιχείου είναι 0.
Οι θέσεις αριθμούνται επίσης και από τα δεξιά, ξεκινώντας με -1.
>>> items = [7, 4, 1, 0, 2, 5]
>>> items.index(4)
1
>>> items.index(10)
ValueError: 10 is not in list
Μπορείς επίσης να δώσεις τις θέσεις start και end για να περιορίσεις την αναζήτηση σε ένα συγκεκριμένο τμήμα της list:
>>> names = ["Tina", "Leo", "Thomas", "Tina", "Emily", "Justin"]
>>> names.index("Tina")
0
>>> names.index("Tina", 2, 5)
3
Η Chaitana έχει ένα πολύ δημοφιλές λουναπάρκ. Έχει μόνο ένα παιχνίδι, στο κέντρο ακριβώς ενός πανέμορφα διαμορφωμένου χώρου: το The Biggest Roller Coaster in the World(TM). Αν και υπάρχει μόνο αυτό το αξιοθέατο, άνθρωποι ταξιδεύουν από όλο τον κόσμο και στέκονται στην ουρά για ώρες για να έχουν την ευκαιρία να κάνουν βόλτα στο υπερ-κόστερ της Chaitana.
Υπάρχουν δύο ουρές για αυτό το παιχνίδι, καθεμία από τις οποίες αναπαρίσταται ως list:
Σου ζητήθηκε να γράψεις κώδικα για να διαχειρίζεσαι καλύτερα τους επισκέπτες του πάρκου. Πρέπει να υλοποιήσεις τις παρακάτω συναρτήσεις όσο το δυνατόν πιο γρήγορα, πριν οι επισκέπτες (και το αφεντικό σου, η Chaitana!) αρχίσουν να γκρινιάζουν. Φρόντισε να διαβάσεις προσεκτικά. Κάποιες εργασίες σου ζητούν να αλλάξεις ή να ενημερώσεις την υπάρχουσα ουρά, ενώ άλλες σου ζητούν να φτιάξεις ένα αντίγραφό της.
Όρισε τη συνάρτηση add_me_to_the_queue() που παίρνει 4 παραμέτρους <express_queue>, <normal_queue>, <ticket_type>, <person_name> και επιστρέφει την κατάλληλη ουρά, ενημερωμένη με το όνομα του ατόμου.
<ticket_type> είναι ένα int με 1 == express_queue και 0 == normal_queue.<person_name> είναι το όνομα (ως str) του ατόμου που θα προστεθεί στην αντίστοιχη ουρά.>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=1, person_name="RichieRich")
...
["Tony", "Bruce", "RichieRich"]
>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=0, person_name="HawkEye")
....
["RobotGuy", "WW", "HawkEye"]
Ένα άτομο έφτασε αργά στο πάρκο, αλλά θέλει να μπει στην ουρά όπου περιμένουν οι φίλοι του. Ωστόσο, δεν έχει ιδέα πού στέκονται οι φίλοι του και δεν υπάρχει σήμα κινητού για να τους πάρει τηλέφωνο.
Όρισε τη συνάρτηση find_my_friend() που παίρνει 2 παραμέτρους, queue και friend_name, και επιστρέφει τη θέση στην ουρά του ονόματος του ατόμου.
<queue> είναι η list με τα άτομα που στέκονται στην ουρά.<friend_name> είναι το όνομα του φίλου του οποίου τη θέση (τη σειρά στην ουρά) πρέπει να βρεις.Θυμήσου: Η αρίθμηση των θέσεων ξεκινά από το 0 από τα αριστερά και από το -1 από τα δεξιά.
>>> find_my_friend(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], friend_name="Steve")
...
1
Τώρα που βρέθηκαν οι φίλοι του (στην εργασία #2 παραπάνω), αυτός που ήρθε αργά θα ήθελε να μπει μαζί τους, στη θέση τους στην ουρά.
Όρισε τη συνάρτηση add_me_with_my_friends() που παίρνει 3 παραμέτρους, queue, index και person_name.
<queue> είναι η list με τα άτομα που στέκονται στην ουρά.<index> είναι η θέση στην οποία πρέπει να προστεθεί το νέο άτομο.<person_name> είναι το όνομα του ατόμου που θα προστεθεί στη θέση index.Επίστρεψε την ουρά, ενημερωμένη με το όνομα αυτού που ήρθε αργά.
>>> add_me_with_my_friends(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], index=1, person_name="Bucky")
...
["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Μόλις άκουσες από την ουρά ότι υπάρχει ένας πολύ κακός άνθρωπος που σπρώχνει, φωνάζει και δημιουργεί προβλήματα. Πρέπει να πετάξεις έξω αυτόν τον ταραξία για την κακή του συμπεριφορά!
Όρισε τη συνάρτηση remove_the_mean_person() που παίρνει 2 παραμέτρους, queue και person_name.
<queue> είναι η list με τα άτομα που στέκονται στην ουρά.<person_name> είναι το όνομα του ατόμου που πρέπει να πεταχτεί έξω.Επίστρεψε την ουρά, ενημερωμένη χωρίς το όνομα του κακού ανθρώπου.
>>> remove_the_mean_person(queue=["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], person_name="Eltran")
...
["Natasha", "Steve", "Wanda", "Rocket"]
Μπορεί να μην έχεις δει δύο άσχετους ανθρώπους που μοιάζουν ακριβώς ίδιοι, αλλά σίγουρα έχεις δει άσχετους ανθρώπους με το ίδιο ακριβώς όνομα (συνονόματους)! Σήμερα, φαίνεται ότι υπάρχουν πολλοί από αυτούς στο πάρκο. Θέλεις να μάθεις πόσες φορές εμφανίζεται ένα συγκεκριμένο όνομα στην ουρά.
Όρισε τη συνάρτηση how_many_namefellows() που παίρνει 2 παραμέτρους, queue και person_name.
<queue> είναι η list με τα άτομα που στέκονται στην ουρά.<person_name> είναι το όνομα που πιστεύεις ότι μπορεί να εμφανίζεται πάνω από μία φορά στην ουρά.Επίστρεψε τον αριθμό των εμφανίσεων του person_name, ως int.
>>> how_many_namefellows(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"], person_name="Natasha")
...
2
Δυστυχώς, σήμερα το πάρκο είναι υπερπλήρες και πρέπει να αφαιρέσεις το τελευταίο άτομο από την κανονική ουρά (θα του δώσεις ένα κουπόνι για να έρθει ξανά στην ουρά εξπρές κάποια άλλη μέρα).
Θα πρέπει να ορίσεις τη συνάρτηση remove_the_last_person() που παίρνει 1 παράμετρο, το queue, που είναι η λίστα με τα άτομα που στέκονται στην ουρά.
Πρέπει να ενημερώσεις τη list και επίσης να return το όνομα του ατόμου που αφαιρέθηκε, ώστε να μπορέσεις να του γράψεις ένα κουπόνι.
>>> remove_the_last_person(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
'Rocket'
Για διοικητικούς σκοπούς, πρέπει να βάλεις όλα τα ονόματα μιας δεδομένης ουράς σε αλφαβητική σειρά.
Όρισε τη συνάρτηση sorted_names() που παίρνει 1 όρισμα, το queue, (τη list με τα άτομα που στέκονται στην ουρά), και επιστρέφει ένα sorted αντίγραφο της list.
>>> sorted_names(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.