Porozumění seznamu Pythonu (s příklady)

V tomto článku se dozvíme o porozumění seznamu Pythonu a o tom, jak jej používat.

Seznamte porozumění vs pro smyčku v Pythonu

Předpokládejme, že chceme oddělit písmena slova humana přidat písmena jako položky seznamu. První věc, která přijde na mysl, by bylo použití pro smyčku.

Příklad 1: Iterace řetězcem Using for Loop

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

Když spustíme program, výstup bude:

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

Python má však jednodušší způsob, jak vyřešit tento problém pomocí List Comprehension. Seznam s porozuměním je elegantní způsob, jak definovat a vytvářet seznamy na základě existujících seznamů.

Podívejme se, jak lze výše uvedený program napsat pomocí porozumění seznamu.

Příklad 2: Iterace řetězcem pomocí seznamu s porozuměním

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

Když spustíme program, výstup bude:

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

Ve výše uvedeném příkladu je nový seznam přiřazen proměnné h_letters a seznam obsahuje položky iterovatelného řetězce 'human'. Voláme print()funkci pro příjem výstupu.

Syntaxe porozumění seznamu

 (výraz pro položku v seznamu)

Nyní můžeme určit, kde se používají porozumění seznamu.

Pokud jste si všimli, humanje řetězec, nikoli seznam. To je síla porozumění seznamu. Může identifikovat, kdy obdrží řetězec nebo n-tici, a pracovat na ní jako na seznamu.

Můžete to udělat pomocí smyček. Ne každá smyčka však může být přepsána jako seznamové porozumění. Ale jak se naučíte porozumět seznamům a budete se s nimi dobře seznámit, zjistíte, že touto elegantní syntaxí nahrazujete stále více smyček.

Seznam funkcí Porozumění vs Lambda

Porozumění seznamu není jediný způsob, jak na seznamech pracovat. Různé integrované funkce a funkce lambda mohou vytvářet a upravovat seznamy v méně řádcích kódu.

Příklad 3: Použití funkcí Lambda v seznamu

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

Když spustíme program, výstup bude

 ('člověk')

Srozumitelnosti seznamu jsou však obvykle čitelnější než funkce lambda. Je snazší pochopit, čeho se programátor snažil dosáhnout, když jsou použity seznamy.

Podmínky v porozumění seznamu

Porozumění seznamu může využít podmíněné prohlášení k úpravě existujícího seznamu (nebo jiných n-tic). Vytvoříme seznam, který používá matematické operátory, celá čísla a range ().

Příklad 4: Použití if s porozuměním seznamu

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

Když spustíme výše uvedený program, výstup bude:

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

Seznam, number_list, bude naplněn položkami v rozsahu od 0-19, pokud je hodnota položky dělitelná 2.

Příklad 5: Vnořené IF s porozuměním seznamu

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

Když spustíme výše uvedený program, výstup bude:

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

Zde seznam kontrol porozumění:

  1. Je y dělitelné 2 nebo ne?
  2. Je y dělitelné 5 nebo ne?

Pokud y splňuje obě podmínky, je y připojeno k num_list.

Příklad 6: pokud… jinak S porozuměním seznamu

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

Když spustíme výše uvedený program, výstup bude:

 ('Sudý', 'Zvláštní', 'Sudý', 'Zvláštní', 'Sudý', 'Zvláštní', 'Sudý', 'Zvláštní', 'Sudý', 'Zvláštní')

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.
  • Nezapomeňte, že každé porozumění seznamu lze přepsat na smyčku for, ale každou smyčku for nelze přepsat ve formě porozumění seznamu.

Zajímavé články...