Python List Comprehension (With Exempel)

I den här artikeln kommer vi att lära oss om Python-listförståelser och hur man använder den.

List Comprehension vs For Loop i Python

Antag att vi vill separera bokstäverna i ordet humanoch lägga till bokstäverna som objekt i en lista. Det första som kommer i åtanke skulle vara att använda för loop.

Exempel 1: Iterera genom en sträng som använder för loop

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

När vi kör programmet blir resultatet:

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

Men Python har ett enklare sätt att lösa problemet med List Comprehension. Listförståelse är ett elegant sätt att definiera och skapa listor baserat på befintliga listor.

Låt oss se hur ovanstående program kan skrivas med hjälp av listförståelser.

Exempel 2: Iterera genom en sträng med hjälp av listförståelse

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

När vi kör programmet blir resultatet:

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

I exemplet ovan tilldelas variabeln h_letters en ny lista och listan innehåller objekten i den iterabla strängen 'human'. Vi kallar print()funktion för att ta emot utdata.

Syntax för listförståelse

 (uttryck för objekt i listan)

Vi kan nu identifiera var listförståelser används.

Om du märkte, humanär en sträng, inte en lista. Detta är kraften i listförståelse. Den kan identifiera när den tar emot en sträng eller en tupel och arbeta på den som en lista.

Du kan göra det med öglor. Men inte varje slinga kan skrivas om som listförståelse. Men när du lär dig och blir bekväm med listförståelser kommer du att ersätta fler och fler slingor med denna eleganta syntax.

Lista förståelser jämfört med Lambda-funktioner

Listförståelser är inte det enda sättet att arbeta med listor. Olika inbyggda funktioner och lambdafunktioner kan skapa och ändra listor i mindre kodrader.

Exempel 3: Använda Lambda-funktioner i Listan

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

När vi kör programmet blir resultatet

 ('mänsklig')

Listförståelser är dock vanligtvis mer läsbara än lambdafunktioner. Det är lättare att förstå vad programmeraren försökte åstadkomma när listförståelser används.

Villkor i listförståelse

Listförståelser kan använda villkorliga uttalanden för att modifiera befintlig lista (eller andra tupler). Vi skapar en lista som använder matematiska operatorer, heltal och intervall ().

Exempel 4: Använda if med List Comprehension

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

När vi kör ovanstående program blir resultatet:

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

Listan, number_list, kommer att fyllas av objekten i intervallet 0-19 om artikelns värde är delbart med 2.

Exempel 5: Kapslade IF med listförståelse

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

När vi kör ovanstående program blir resultatet:

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

Här listar du förståelsekontroller:

  1. Är y delbart med 2 eller inte?
  2. Är y delbart med 5 eller inte?

Om y uppfyller båda villkoren läggs y till num_list.

Exempel 6: om … annars med listförståelse

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

När vi kör ovanstående program blir resultatet:

 ('Jämnt', 'udda', 'jämnt', 'udda', 'jämnt', 'udda', 'jämnt', 'udda', 'jämnt', 'udda')

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.
  • Kom ihåg att varje listförståelse kan skrivas om för loop, men varje för loop kan inte skrivas om i form av listförståelse.

Intressanta artiklar...