I denne artikel vil vi lære om Python-listeforståelser, og hvordan man bruger den.
Liste Forståelse vs For Loop i Python
Antag, vi vil adskille bogstaverne i ordet human
og tilføje bogstaverne som emner på en liste. Den første ting, der kommer i tankerne, ville være at bruge til loop.
Eksempel 1: Iterering gennem en streng, der bruger til løkke
h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)
Når vi kører programmet, vil output være:
('h', 'u', 'm', 'a', 'n')
Imidlertid har Python en nemmere måde at løse dette problem ved hjælp af List Comprehension. Listeforståelse er en elegant måde at definere og oprette lister på baggrund af eksisterende lister.
Lad os se, hvordan ovenstående program kan skrives ved hjælp af listeforståelser.
Eksempel 2: Iterering gennem en streng ved hjælp af listeforståelse
h_letters = ( letter for letter in 'human' ) print( h_letters)
Når vi kører programmet, vil output være:
('h', 'u', 'm', 'a', 'n')
I ovenstående eksempel tildeles variablen h_letters en ny liste, og listen indeholder elementerne i den iterable streng 'human'. Vi kalder print()
funktion for at modtage output.
Syntaks for listeforståelse
(udtryk for element på listen)
Vi kan nu identificere, hvor listeforståelser bruges.
Hvis du har bemærket, human
er en streng, ikke en liste. Dette er styrken ved listeforståelse. Det kan identificere, hvornår den modtager en streng eller en tuple og arbejde på den som en liste.
Du kan gøre det ved hjælp af sløjfer. Ikke alle sløjfer kan dog omskrives som listeforståelse. Men når du lærer og bliver fortrolig med listeforståelser, vil du finde dig selv at erstatte flere og flere sløjfer med denne elegante syntaks.
Listeforståelser vs Lambda-funktioner
Listeforståelse er ikke den eneste måde at arbejde på lister på. Forskellige indbyggede funktioner og lambda-funktioner kan oprette og ændre lister i færre kodelinjer.
Eksempel 3: Brug af Lambda-funktioner inde i listen
letters = list(map(lambda x: x, 'human')) print(letters)
Når vi kører programmet, vil output være
('human')
Men listeforståelser er normalt mere menneskelige læsbare end lambda-funktioner. Det er lettere at forstå, hvad programmøren forsøgte at opnå, når der bruges listeforståelser.
Betingelser i listeforståelse
Listeforståelser kan bruge betinget erklæring til at ændre eksisterende liste (eller andre tupler). Vi opretter en liste, der bruger matematiske operatorer, heltal og rækkevidde ().
Eksempel 4: Brug af hvis med listeforståelse
number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)
Når vi kører ovenstående program, vil output være:
(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)
Listen, nummer_liste, udfyldes af emnerne i området fra 0-19, hvis varens værdi kan deles med 2.
Eksempel 5: Indlejret IF med listeforståelse
num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)
Når vi kører ovenstående program, vil output være:
(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
Her skal du forstå forståelseskontrol:
- Er y deleligt med 2 eller ej?
- Er y deleligt med 5 eller ej?
Hvis y opfylder begge betingelser, tilføjes y til num_list.
Eksempel 6: hvis … ellers med listeforståelse
obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)
Når vi kører ovenstående program, vil output være:
('Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd')
Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even
is appended to the obj list. If not, Odd
is appended.
Nested Loops in List Comprehension
Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.
Example 7: Transpose of Matrix using Nested Loops
transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)
Output
((1, 4), (2, 5), (3, 6), (4, 8))
The above code use two for loops to find transpose of the matrix.
We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.
Example 8: Transpose of a Matrix using List Comprehension
matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)
When we run the above program, the output will be:
((1, 3, 5, 7), (2, 4, 6, 8))
In above program, we have a variable matrix which have 4
rows and 2
columns.We need to find transpose of the matrix. For that, we used list comprehension.
**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2)
is executed before row(i) for row in matrix
. Hence at first, a value is assigned to i then item directed by row(i)
is appended in the transpose variable.
Key Points to Remember
- List comprehension is an elegant way to define and create lists based on existing lists.
- List comprehension is generally more compact and faster than normal functions and loops for creating list.
- However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
- Husk, at hver listeforståelse kan omskrives til loop, men hver for loop kan ikke omskrives i form af listeforståelse.