Επεξήγηση λιστών Python: Len, Pop, Index και List κατανόηση

Οι λίστες στο Python είναι παρόμοιες με πίνακες στο JavaScript. Είναι ένας από τους ενσωματωμένους τύπους δεδομένων στην Python που χρησιμοποιούνται για την αποθήκευση συλλογών δεδομένων.

Βασική χρήση

Πώς να δημιουργήσετε μια λίστα

Δημιουργείται ένα κενό listχρησιμοποιώντας ένα ζευγάρι αγκύλες:

>>> empty_list = [] >>> type(empty_list)  >>> len(empty_list) 0

Το A listμπορεί να δημιουργηθεί με στοιχεία επισυνάπτοντας μια λίστα στοιχείων διαχωρισμένων με κόμμα με αγκύλες. Οι λίστες επιτρέπουν τα στοιχεία να είναι διαφορετικών τύπων (ετερογενή), αλλά συνήθως είναι ενός τύπου (ομοιογενή):

>>> homogeneous_list = [1, 1, 2, 3, 5, 8] >>> type(homogeneous_list)  >>> print(homogeneous_list) [1, 1, 2, 3, 5, 8] >>> len(homogeneous_list) 6 >>> heterogeneous_list = [1, "Hello Campers!"] >>> print(heterogeneous_list) [1, "Hello Campers!"] >>> len(heterogeneous_list) 2

Ο listκατασκευαστής μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία list:

>>> empty_list = list() # Creates an empty list >>> print(empty_list) [] >>> list_from_iterable = list("Hello campers!") # Creates a list from an iterable. >>> print(list_from_iterable) ['H', 'e', 'l', 'l', 'o', ' ', 'c', 'a', 'm', 'p', 'e', 'r', 's', '!']

Μπορείτε επίσης να χρησιμοποιήσετε την κατανόηση λίστας για να δημιουργήσετε λίστες, τις οποίες θα καλύψουμε αργότερα στο άρθρο.

Πρόσβαση σε στοιχεία σε μια λίστα

>>> my_list = [1, 2, 9, 16, 25] >>> print(my_list) [1, 2, 9, 16, 25]

Μηδενικό ευρετήριο

>>> my_list[0] 1 >>> my_list[1] 2 >>> my_list[2] 9

Τελειώστε την ευρετηρίαση

>>> my_list[-1] 25 >>> my_list[-2] 16

Αποσυσκευασία λιστών για το python-3

>>> print(*my_list) 1 2 9 16 25

Οι λίστες είναι μεταβλητές

listsείναι μεταβλητά δοχεία. Τα μεταβλητά κοντέινερ είναι κοντέινερ που επιτρέπουν αλλαγές στα αντικείμενα που περιέχονται από το κοντέινερ.

Τα στοιχεία από ένα listμπορεί να εξαχθούν και να αναδιαταχθούν χρησιμοποιώντας ένα άλλο listως ευρετήριο.

>>> my_list = [1, 2, 9, 16, 25, 34, 53, 21] >>> my_index = [5, 2, 0] >>> my_new_list = [my_list[i] for i in my_index] >>> print(my_new_list) [34, 9, 1]

Λίστα μεθόδων

len()

Η len()μέθοδος επιστρέφει το μήκος ενός αντικειμένου, είτε πρόκειται για λίστα, συμβολοσειρά, πλειάδα ή λεξικό.

len() παίρνει ένα όρισμα, το οποίο μπορεί να είναι μια ακολουθία (όπως μια συμβολοσειρά, bytes, tuple, list ή range) ή συλλογή (όπως ένα λεξικό, σετ ή παγωμένο σύνολο).

list1 = [123, 'xyz', 'zara'] # list print(len(list1)) # prints 3 as there are 3 elements in the list1 str1 = 'basketball' # string print(len(str1)) # prints 10 as the str1 is made of 10 characters tuple1 = (2, 3, 4, 5) # tuple print(len(tuple1)) # prints 4 as there are 4 elements in the tuple1 dict1 = {'name': 'John', 'age': 4, 'score': 45} # dictionary print(len(dict1)) # prints 3 as there are 3 key and value pairs in the dict1

index()

index() επιστρέφει την πρώτη εμφάνιση / ευρετήριο του στοιχείου στη λίστα που δίνεται ως όρισμα στη συνάρτηση.

numbers = [1, 2, 2, 3, 9, 5, 6, 10] words = ["I", "love", "Python", "I", "love"] print(numbers.index(9)) # 4 print(numbers.index(2)) # 1 print(words.index("I")) # 0 print(words.index("am")) # returns a ValueError as 'am' is not in the `words` list

Εδώ η πρώτη έξοδος είναι πολύ προφανής, αλλά η δεύτερη και η τρίτη μπορεί να φαίνονται συγκεχυμένες στην αρχή. Αλλά θυμηθείτε index()επιστρέφει την πρώτη εμφάνιση του στοιχείου και ως εκ τούτου σε αυτήν την περίπτωση 1και 0είναι οι δείκτες όπου 2και "I"εμφανίζονται πρώτα στις λίστες αντίστοιχα.

Επίσης, εάν ένα στοιχείο δεν βρίσκεται στη λίστα, το a ValueErrorεπιστρέφεται όπως στην περίπτωση ευρετηρίου "am"στη wordsλίστα.

Προαιρετικά επιχειρήματα

Μπορείτε επίσης να χρησιμοποιήσετε προαιρετικά ορίσματα για να περιορίσετε την αναζήτησή σας σε μια συγκεκριμένη υπο-ακολουθία της λίστας:

words = ["I", "am", "a", "I", "am", "Pythonista"] print(words.index("am", 2, 5)) # 4

Αν και το στοιχείο πραγματοποιείται αναζήτηση μεταξύ των δεικτών 2 (χωρίς αποκλεισμούς) και 5 (χωρίς συμπερίληψη), ο δείκτης που επιστρέφεται υπολογίζεται σε σχέση με την αρχή της πλήρους λίστας και όχι με το όρισμα έναρξης.

pop()

Η pop()μέθοδος αφαιρεί και επιστρέφει το τελευταίο στοιχείο από μια λίστα.

Υπάρχει μια προαιρετική παράμετρος που είναι ο δείκτης του στοιχείου που πρέπει να αφαιρεθεί από τη λίστα. Εάν δεν έχει καθοριστεί ευρετήριο, pop()καταργεί και επιστρέφει το τελευταίο στοιχείο στη λίστα.

Εάν το ευρετήριο που μεταβιβάστηκε στη pop()μέθοδο δεν βρίσκεται στο εύρος, ρίχνει την IndexError: pop index out of rangeεξαίρεση.

cities = ['New York', 'Dallas', 'San Antonio', 'Houston', 'San Francisco']; print "City popped is: ", cities.pop() # City popped is: San Francisco print "City at index 2 is : ", cities.pop(2) # City at index 2 is: San Antonio

Βασική λειτουργικότητα στοίβας

Η pop()μέθοδος χρησιμοποιείται συχνά σε συνδυασμό με append()την εφαρμογή βασικών λειτουργιών στοίβας σε μια εφαρμογή Python:

stack = [] for i in range(5): stack.append(i) while len(stack): print(stack.pop())

Λίστα κατανόησης

Λίστα κατανόησης είναι ένας τρόπος για να βρούμε μια λίστα για να δημιουργήσουμε μια νέα λίστα με βάση ορισμένες συνθήκες. Μπορεί να προκαλέσει σύγχυση στην αρχή, αλλά μόλις εξοικειωθείτε με τη σύνταξη, είναι πολύ ισχυρό και γρήγορο.

The first step in learning how to use list comprehension is to look at the traditional way of looping through a list. The following is a simple example that returns a new list of even numbers.

# Example list for demonstration some_list = [1, 2, 5, 7, 8, 10] # Empty list that will be populate with a loop even_list = [] for number in some_list: if number % 2 == 0: even_list.append(number) # even_list now equals [2, 8, 10]

First a list is created with some numbers. You then create an empty list that will hold your results from the loop. In the loop you check to see if each number is divisible by 2 and if so you add it the the even_list. This took 5 lines of code not including comments and white space which isn’t much in this example.

Now for the list comprehension example.

# Example list for demonstration some_list = [1, 2, 5, 7, 8, 10] # List Comprehension even_list = [number for number in some_list if number % 2 == 0] # even_list now equals [2, 8, 10]

Another example, with the same two steps: The following will create a list of numbers that correspond to the numbers in my_starting_list multiplied by 7.

my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8] my_new_list = [] for item in my_starting_list: my_new_list.append(item * 7)

When this code is run, the final value of my_new_list is: [7, 14, 21, 28, 35, 42, 49, 56]

A developer using list comprehension could achieve the same result using the following list comprehension, which results in the same my_new_list.

my_starting_list = [1, 2, 3, 4, 5, 6, 7, 8] my_new_list = [item * 7 for item in my_starting_list]

A simple formula to write in a list comprehension way is:

my_list = [{operation with input n} for n in {python iterable}]

Replace {operation with input n} with however you want to change the item returned from the iterable. The above example uses n * 7 but the operation can be as simple or as complex as necessary.

Replace {python iterable} with any iterable. Sequence types will be most common. A list was used in the above example, but tuples and ranges are also common.

Η κατανόηση λίστας προσθέτει ένα στοιχείο από μια υπάρχουσα λίστα σε μια νέα λίστα εάν πληρούται κάποια προϋπόθεση. Είναι πιο καθαρό, αλλά είναι επίσης πολύ πιο γρήγορο στις περισσότερες περιπτώσεις. Σε ορισμένες περιπτώσεις, η κατανόηση λίστας μπορεί να εμποδίσει την αναγνωσιμότητα, επομένως ο προγραμματιστής πρέπει να σταθμίσει τις επιλογές του όταν επιλέγει να χρησιμοποιήσει την κατανόηση λίστας.

Παραδείγματα κατανόησης λίστας με όρους

Η ροή του ελέγχου σε κατανοήσεις λίστας μπορεί να ελεγχθεί χρησιμοποιώντας όρους. Για παράδειγμα:

only_even_list = [i for i in range(13) if i%2==0]

Αυτό ισοδυναμεί με τον ακόλουθο βρόχο:

only_even_list = list() for i in range(13): if i%2 == 0: only_even_list.append(i)

Η κατανόηση λίστας μπορεί επίσης να περιέχει ένθετο εάν οι συνθήκες. Εξετάστε τον ακόλουθο βρόχο:

divisible = list() for i in range(50): if i%2 == 0: if i%3 == 0: divisible.append(i)

Χρησιμοποιώντας την κατανόηση λίστας αυτό μπορεί να γραφτεί ως:

divisible = [i for i in range(50) if i%2==0 if i%3==0]

Η δήλωση If-Else μπορεί επίσης να χρησιμοποιηθεί μαζί με την κατανόηση της λίστας.

list_1 = [i if i%2==0 else i*-1 for i in range(10)]

Περισσότερες πληροφορίες:

  • Τα καλύτερα παραδείγματα κώδικα Python