Razumevanje seznama Python (z primeri)

V tem članku bomo spoznali razumevanje seznama Python in kako ga uporabiti.

Seznam razumevanja v primerjavi z zanko v Pythonu

Recimo, da želimo ločiti črke besede humanin jih dodati kot elemente na seznamu. Prva stvar, ki mi pride na misel, bi bila uporaba zanke for.

Primer 1: Iteracija skozi niz Uporaba za zanko

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

Ko zaženemo program, bo rezultat:

 ('človek')

Vendar ima Python to težavo lažje rešiti z uporabo seznama razumevanja. Razumevanje seznamov je eleganten način za določanje in ustvarjanje seznamov na podlagi obstoječih seznamov.

Poglejmo, kako lahko zgornji program napišemo s pomočjo seznama.

Primer 2: Iteracija skozi niz z uporabo seznama

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

Ko zaženemo program, bo rezultat:

 ('človek')

V zgornjem primeru je spremenljivki h_letters dodeljen nov seznam, seznam pa vsebuje postavke iterabilnega niza 'human'. Kličemo print()funkcijo za sprejem izhoda.

Sintaksa razumevanja seznama

 (izraz za element na seznamu)

Zdaj lahko ugotovimo, kje se uporabljajo razumevanja seznamov.

Če ste opazili, humanje niz, ne seznam. To je moč razumevanja seznama. Prepozna lahko, kdaj prejme niz ali nabor, in na njem deluje kot seznam.

To lahko storite z zankami. Vendar ni mogoče vsake zanke napisati kot razumevanje seznama. Toda, ko se boste naučili in se počutili udobno pri razumevanju seznamov, boste vse več zank zamenjali s to elegantno sintakso.

Seznam razumevanja v primerjavi z Lambda funkcijami

Razumevanje seznamov ni edini način za delo na seznamih. Različne vgrajene funkcije in lambda funkcije lahko ustvarjajo in spreminjajo sezname v manj vrsticah kode.

Primer 3: Uporaba Lambda funkcij znotraj seznama

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

Ko zaženemo program, bo rezultat

 ('človek')

Vendar so razumevanja seznamov običajno bolj berljiva kot lambda funkcije. Lažje je razumeti, kaj je poskušal doseči programer, ko se uporablja razumevanje seznama.

Pogoji pri razumevanju seznama

Razumevanja seznamov lahko uporabljajo pogojni stavek za spreminjanje obstoječega seznama (ali drugih nabora). Ustvarili bomo seznam, ki uporablja matematične operatorje, cela števila in obseg ().

Primer 4: Uporaba if z razumevanjem seznama

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

Ko zaženemo zgornji program, bo rezultat:

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

Seznam number_list bo zapolnjen z elementi v območju od 0 do 19, če je vrednost elementa deljiva z 2

Primer 5: Vgnezdeni IF z razumevanjem seznama

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

Ko zaženemo zgornji program, bo rezultat:

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

Tukaj navedite preverjanja razumevanja:

  1. Je y deljivo z 2 ali ne?
  2. Je y deljivo s 5 ali ne?

Če y izpolnjuje oba pogoja, je y dodan na seznam num_list.

Primer 6: če … drugače z razumevanjem seznama

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

Ko zaženemo zgornji program, bo rezultat:

 ('Sodo', 'Nepar', 'Sodo', 'Nepar', 'Sodo', 'Nepar', 'Sodo', 'Nepar', 'Sodo', '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.
  • Ne pozabite, da je mogoče vsako razumevanje seznama prepisati v zanko for, vendar vsake zanke for ne moremo napisati v obliki razumevanja seznama.

Zanimive Članki...