Porozumenie zoznamu Python (s príkladmi)

V tomto článku sa dozvieme o porozumení zoznamov jazykov Python a o tom, ako ich používať.

Uveďte zoznam s porozumením pre slučku v jazyku Python

Predpokladajme, že chceme oddeliť písmená slova humana pridať písmená ako položky zoznamu. Prvá vec, ktorá mi príde na myseľ, by bolo použitie cyklu.

Príklad 1: Iterácia cez reťazec Using for Loop

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

Keď spustíme program, výstup bude:

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

Python má však ľahší spôsob riešenia tohto problému pomocou funkcie List Comprehension. Zoznamové porozumenie je elegantný spôsob definovania a vytvárania zoznamov na základe existujúcich zoznamov.

Pozrime sa, ako je možné vyššie uvedený program napísať pomocou porozumenia zoznamu.

Príklad 2: Iterácia reťazcom pomocou porozumenia zoznamu

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

Keď spustíme program, výstup bude:

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

Vo vyššie uvedenom príklade je nový zoznam priradený k premennej h_letters a zoznam obsahuje položky opakovateľného reťazca „human“. Voláme print()funkciu na príjem výstupu.

Syntax porozumenia zoznamu

 (výraz pre položku v zozname)

Teraz môžeme zistiť, kde sa používajú porozumenia zoznamu.

Ak ste si všimli, humanje to reťazec, nie zoznam. Toto je sila porozumenia zoznamu. Môže identifikovať, kedy dostane reťazec alebo n-ticu, a pracovať s ňou ako so zoznamom.

Môžete to urobiť pomocou slučiek. Nie každá slučka sa však dá prepísať na zoznam s porozumením. Ale keď sa naučíte porozumieť zoznamom a uspokojíte ich, zistíte, že nahradzujete čoraz viac slučiek touto elegantnou syntaxou.

Zoznam funkcií porozumenia vs Lambda

Pochopenie zoznamu nie je jediný spôsob, ako na zozname pracovať. Rôzne vstavané funkcie a funkcie lambda môžu vytvárať a upravovať zoznamy v menšom počte riadkov kódu.

Príklad 3: Používanie funkcií Lambda v zozname

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

Keď spustíme program, výstup bude

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

Porozumenia zoznamu sú však zvyčajne čitateľnejšie pre človeka ako funkcie lambda. Je ľahšie pochopiť, čo sa programátor snažil dosiahnuť, keď sa používajú zoznamy.

Podmienky v porozumení zoznamu

Porozumenia zoznamu môžu využiť podmienené vyhlásenie na úpravu existujúceho zoznamu (alebo iných n-tíc). Vytvoríme zoznam, ktorý používa matematické operátory, celé čísla a rozsah ().

Príklad 4: Použitie if s porozumením zoznamu

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

Keď spustíme vyššie uvedený program, výstup bude:

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

Zoznam, number_list, sa vyplní položkami v rozsahu od 0 do 19, ak je hodnota položky deliteľná 2.

Príklad 5: Vnorené IF s porozumením zoznamu

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

Keď spustíme vyššie uvedený program, výstup bude:

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

Tu vypíšte kontroly porozumenia:

  1. Je y deliteľné dvoma alebo nie?
  2. Je y deliteľné 5 alebo nie?

Ak y spĺňa obe podmienky, y sa pripojí k num_list.

Príklad 6: ak … inak s porozumením zoznamu

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

Keď spustíme vyššie uvedený program, výstup bude:

 („Párny“, „Nepárny“, „Párny“, „Nepárny“, „Párny“, „Nepárny“, „Párny“, „Nepárny“, „Párny“, „Nepárny“)

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.
  • Pamätajte, že každé porozumenie zoznamu je možné prepísať na cyklus for, ale každé cyklus for sa nedá prepísať formou porozumenia zoznamu.

Zaujímavé články...