Python List Comprehension (med eksempler)

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 humanog 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, humaner 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:

  1. Er y deleligt med 2 eller ej?
  2. 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.

Interessante artikler...