Python List Comprehension (med eksempler)

I denne artikkelen vil vi lære om Python-listeforståelser, og hvordan du bruker den.

List Comprehension vs For Loop i Python

Anta at vi vil skille bokstavene i ordet humanog legge til bokstavene som elementer i en liste. Det første som kommer i tankene ville være å bruke for loop.

Eksempel 1: Iterere gjennom en streng som bruker for løkke

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

Når vi kjører programmet, vil utdataene være:

 ('h', 'u', 'm', 'a', 'n')

Imidlertid har Python en enklere måte å løse dette problemet ved hjelp av List Comprehension. Listeforståelse er en elegant måte å definere og lage lister basert på eksisterende lister.

La oss se hvordan programmet ovenfor kan skrives ved hjelp av listeforståelser.

Eksempel 2: Iterere gjennom en streng ved hjelp av listeforståelse

 h_letters = ( letter for letter in 'human' ) print( h_letters)

Når vi kjører programmet, vil utdataene være:

 ('h', 'u', 'm', 'a', 'n')

I eksemplet ovenfor er en ny liste tildelt variabelen h_letters, og listen inneholder elementene til den iterable strengen 'human'. Vi kaller print()funksjon for å motta utdata.

Syntaks for listeforståelse

 (uttrykk for varen i listen)

Vi kan nå identifisere hvor listeforståelser brukes.

Hvis du la merke til, humaner en streng, ikke en liste. Dette er kraften i listeforståelse. Den kan identifisere når den mottar en streng eller en tuple og jobbe med den som en liste.

Du kan gjøre det ved hjelp av løkker. Imidlertid kan ikke hver sløyfe skrives om som listeforståelse. Men når du lærer deg og blir komfortabel med listeforståelse, vil du finne deg selv å erstatte flere og flere løkker med denne elegante syntaksen.

Liste Forståelser vs Lambda-funksjoner

Listeforståelse er ikke den eneste måten å jobbe med lister på. Ulike innebygde funksjoner og lambda-funksjoner kan opprette og endre lister i færre kodelinjer.

Eksempel 3: Bruke Lambda-funksjoner i List

 letters = list(map(lambda x: x, 'human')) print(letters)

Når vi kjører programmet, vil utdataene være

 ('menneskelig')

Imidlertid er listeforståelser vanligvis mer lesbare enn lambdafunksjoner. Det er lettere å forstå hva programmereren prøvde å oppnå når listeforståelse brukes.

Betingelser i listeforståelse

Listeforståelser kan bruke betinget uttalelse for å endre eksisterende liste (eller andre tupler). Vi vil lage en liste som bruker matematiske operatorer, heltall og rekkevidde ().

Eksempel 4: Bruk hvis med listeforståelse

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Når vi kjører programmet ovenfor, vil utdataene være:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

Listen, number_list, vil bli fylt av elementene i området fra 0-19 hvis elementets verdi er delt med 2.

Eksempel 5: Nestet 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 kjører programmet ovenfor, vil utdataene være:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Her viser du forståelseskontroller:

  1. Er y delelig med 2 eller ikke?
  2. Er y delelig med 5 eller ikke?

Hvis y oppfyller begge vilkårene, legges 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 kjører programmet ovenfor, vil utdataene 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 skrives om for loop, men hver for loop kan ikke skrives om i form av listeforståelse.

Interessante artikler...