Forklarede Python-lister: Len, Pop, Index og List Comprehension

Lister i Python ligner arrays i JavaScript. De er en af ​​de indbyggede datatyper i Python, der bruges til at gemme datasamlinger.

Grundlæggende brug

Sådan oprettes en liste

Et tomt listoprettes ved hjælp af et par firkantede parenteser:

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

A listkan oprettes med elementer ved at vedlægge en komma-adskilt liste over elementer med firkantede parenteser. Lister tillader, at elementerne er af forskellige typer (heterogene), men de er oftest af en enkelt type (homogen):

>>> 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

Den listkonstruktør kan også bruges til at skabe en 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', '!']

Du kan også bruge List Comprehension til at oprette lister, som vi dækker senere i artiklen.

Få adgang til elementer på en liste

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

Nul indekseret

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

Sæt indeksering rundt

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

Udpakning af lister til python-3

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

Lister kan ændres

listser ændrede beholdere. Mutable containere er containere, der tillader ændringer, som objekter er indeholdt i containeren.

Elementer fra a listkan ekstraheres og omarrangeres ved hjælp af et andet listsom indeks.

>>> 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]

Liste metoder

len()

Den len()metode returnerer længden af et objekt, hvad enten det er en liste, en snor, tupel, eller ordbog.

len() tager ét argument, som kan være en sekvens (såsom en streng, bytes, tuple, liste eller rækkevidde) eller samling (såsom en ordbog, et sæt eller et frossent sæt).

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() returnerer elementets første forekomst / indeks på listen givet som et argument til funktionen.

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

Her er den første output meget indlysende, men den anden og tredje kan virke forvirrende i starten. Men husk at index()returnere den første forekomst af elementet og dermed i dette tilfælde 1og 0er de indekser, hvor 2og "I"forekommer først i henholdsvis listerne.

Også, hvis et element ikke findes på listen, ValueErrorreturneres a som i tilfælde af indeksering "am"wordslisten.

Valgfri argumenter

Du kan også bruge valgfri argumenter til at begrænse din søgning til en bestemt undersekvens på listen:

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

Selvom elementet søges mellem indekserne 2 (inklusive) og 5 (ikke inklusive), beregnes det returnerede indeks i forhold til begyndelsen af ​​den fulde liste i stedet for startargumentet.

pop()

De pop()metode fjerner og returnerer det sidste element fra en liste.

Der er en valgfri parameter, der er indekset for det element, der skal fjernes fra listen. Hvis der ikke er angivet noget indeks, pop()fjernes og returneres det sidste element på listen.

Hvis indekset, der sendes til pop()metoden, ikke er inden for området, kaster det IndexError: pop index out of rangeundtagelsen.

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

Grundlæggende stakfunktionalitet

Den pop()metode anvendes ofte i forbindelse med append()at implementere grundlæggende stak funktionalitet i en Python ansøgning:

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

Listeforståelse

List Comprehension er en måde at løbe gennem en liste for at producere en ny liste baseret på nogle betingelser. Det kan være forvirrende i starten, men når du først er vant til syntaksen, er det meget kraftfuldt og hurtigt.

Det første trin i at lære at bruge listeforståelse er at se på den traditionelle måde at løbe gennem en liste. Følgende er et simpelt eksempel, der returnerer en ny liste med lige tal.

# 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]

Først oprettes en liste med nogle tal. Du opretter derefter en tom liste, der holder dine resultater fra sløjfen. I sløjfen kontrollerer du, om hvert nummer er deleligt med 2, og i så fald tilføjer du det til even_list. Dette tog 5 linjer kode, inklusive kommentarer og hvidt rum, hvilket ikke er meget i dette eksempel.

Nu til eksemplet med listeforståelse.

# 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]

Et andet eksempel med de samme to trin: Følgende opretter en liste med tal, der svarer til tallene my_starting_listganget med 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)

Når denne kode køres, er den endelige værdi af my_new_list:[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.

Listeforståelse tilføjer et element fra en eksisterende liste til en ny liste, hvis en eller anden betingelse er opfyldt. Det er pænere, men er også meget hurtigere i de fleste tilfælde. I nogle tilfælde kan listeforståelse hindre læsbarheden, så udvikleren skal afveje deres muligheder, når han vælger at bruge listeforståelse.

Eksempler på listeforståelse med betingelser

Strømmen af ​​kontrol i listeforståelser kan styres ved hjælp af betingede betingelser. For eksempel:

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

Dette svarer til følgende sløjfe:

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

Listeforståelse kan også indeholde indlejrede, hvis betingelser. Overvej følgende løkke:

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

Ved hjælp af listeforståelse kan dette skrives som:

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

If-Else-sætning kan også bruges sammen med listeforståelse.

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

Mere information:

  • De bedste eksempler på Python-kode