Razumijevanje Python popisa (s primjerima)

U ovom ćemo članku naučiti o razumijevanju popisa Python i kako ga koristiti.

Navedite razumijevanje i razumijevanje petlje u Pythonu

Pretpostavimo da želimo razdvojiti slova riječi humani dodati ih kao stavke na popisu. Prvo što vam padne na pamet bilo bi korištenje for petlje.

Primjer 1: Iteracija kroz niz pomoću for Loop

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

Kada pokrenemo program, izlaz će biti:

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

Međutim, Python ima lakši način da riješi ovaj problem pomoću Pojmovnog razumijevanja. Razumijevanje popisa elegantan je način definiranja i stvaranja popisa na temelju postojećih popisa.

Pogledajmo kako se gornji program može napisati pomoću razumijevanja popisa.

Primjer 2: Iteracija kroz niz pomoću razumijevanja popisa

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

Kada pokrenemo program, izlaz će biti:

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

U gornjem primjeru, novi je popis dodijeljen varijabli h_letters, a popis sadrži stavke iterabilnog niza 'human'. Pozivamo print()funkciju za primanje rezultata.

Sintaksa razumijevanja popisa

 (izraz za stavku na popisu)

Sada možemo identificirati gdje se koriste poimanja popisa.

Ako ste primijetili, humanto je niz, a ne popis. To je snaga razumijevanja popisa. Može prepoznati kad primi niz ili tuple i raditi na njemu poput popisa.

To možete učiniti pomoću petlji. Međutim, ne može se svaka petlja prepisati kao razumijevanje popisa. No dok učite i budete se ugodno snalazili u razumijevanju popisa, naći ćete kako zamjenjujete sve više i više petlji ovom elegantnom sintaksom.

Popis razumijevanja u odnosu na Lambda funkcije

Razumijevanje popisa nije jedini način rada na popisima. Razne ugrađene funkcije i lambda funkcije mogu stvarati i mijenjati popise u manje redaka koda.

Primjer 3: Korištenje Lambda funkcija unutar Popisa

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

Kada pokrenemo program, izlaz će biti

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

Međutim, poimanja su obično čitljivija za ljude od lambda funkcija. Lakše je razumjeti što je programer pokušavao postići kada se koriste poimanja.

Uvjetnici u razumijevanju popisa

Razumevanja popisa mogu upotrijebiti uvjetni izraz za izmjenu postojećeg popisa (ili drugih korpica). Stvorit ćemo popis koji koristi matematičke operatore, cijele brojeve i raspon ().

Primjer 4: Upotreba if s razumijevanjem popisa

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

Kada pokrenemo gornji program, izlaz će biti:

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

Popis, broj_popis, popunit će se stavkama u rasponu od 0-19 ako je vrijednost stavke djeljiva s 2.

Primjer 5: Ugnježđeni IF s razumijevanjem popisa

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

Kada pokrenemo gornji program, izlaz će biti:

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

Ovdje navedite provjere razumijevanja:

  1. Je li y djeljivo sa 2 ili ne?
  2. Je li y djeljiv s 5 ili ne?

Ako y zadovoljava oba uvjeta, y se dodaje na num_list.

Primjer 6: ako … drugo Uz razumijevanje popisa

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

Kada pokrenemo gornji program, izlaz će biti:

 ('Par', 'Nepar', 'Par', 'Nepar', 'Par', 'Nepar', 'Par', 'Nepar', 'Par', 'Nepar')

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.
  • Zapamtite, svako razumijevanje popisa može se prepisati u for loop, ali svako for loop ne može se prepisati u obliku razumijevanja popisa.

Zanimljivi članci...