Python saraksta izpratne (ar piemēriem)

Šajā rakstā mēs uzzināsim par Python sarakstu izpratni un to, kā to izmantot.

Sarakstā Izpratne pret loku Python

Pieņemsim, ka mēs vēlamies atdalīt vārda humanburtus un pievienot burtus kā saraksta vienumus. Pirmā lieta, kas nāk prātā, būtu izmantot cilpu.

1. piemērs: atkārtojot virkni, izmantojot cilnei

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

Kad mēs palaidīsim programmu, izeja būs:

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

Tomēr Python ir vienkāršāks veids, kā atrisināt šo problēmu, izmantojot saraksta izpratni. Sarakstu izpratne ir elegants veids, kā definēt un izveidot sarakstus, pamatojoties uz esošajiem sarakstiem.

Apskatīsim, kā var uzrakstīt iepriekš minēto programmu, izmantojot saraksta izpratni.

2. piemērs: atkārtojot virkni, izmantojot saraksta izpratni

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

Kad mēs palaidīsim programmu, izeja būs:

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

Iepriekš minētajā piemērā mainīgajiem h_letters tiek piešķirts jauns saraksts, un sarakstā ir iterējamās virknes “human” vienumi. Mēs izsaucam print()funkciju, lai saņemtu izvadi.

Saraksta izpratnes sintakse

 (saraksta vienuma izteiksme)

Tagad mēs varam noteikt, kur tiek izmantoti saraksti.

Ja pamanījāt, humanir virkne, nevis saraksts. Tas ir saraksta izpratnes spēks. Tas var identificēt, kad saņem virkni vai dubultu, un strādāt ar to kā sarakstu.

To var izdarīt, izmantojot cilpas. Tomēr ne katru cilpu var pārrakstīt kā saraksta izpratni. Bet, mācoties un gūstot izpratni par saraksta izpratni, jūs atradīsit arvien vairāk un vairāk cilpu nomainīšanu ar šo eleganto sintaksi.

Uzskaitiet izpratni par Lambda funkcijām

Sarakstu izpratne nav vienīgais veids, kā strādāt ar sarakstiem. Dažādas iebūvētās funkcijas un lambda funkcijas var izveidot un modificēt sarakstus mazākās koda rindās.

3. piemērs: Lambda funkciju izmantošana sarakstā

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

Kad mēs palaidīsim programmu, izeja būs

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

Tomēr sarunu izpratne parasti ir cilvēkiem lasāmāka nekā lambda funkcijas. Lietojot saraksta izpratni, ir vieglāk saprast, ko programmētājs centās paveikt.

Nosacījumi saraksta izpratnē

Sarakstu izpratnē var izmantot nosacījumu, lai modificētu esošo sarakstu (vai citus kopas). Mēs izveidosim sarakstu, kurā tiks izmantoti matemātiskie operatori, veseli skaitļi un diapazons ().

4. piemērs: Ja izmantojat ar saraksta izpratni

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

Kad mēs palaidīsim iepriekš minēto programmu, izeja būs:

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

Ja vienuma vērtība dalās ar 2, saraksts_skaitlis_ tiks aizpildīts ar vienumiem diapazonā no 0 līdz 19.

5. piemērs: ligzdots IF ar saraksta izpratni

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

Kad mēs palaidīsim iepriekš minēto programmu, izeja būs:

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

Šeit uzskaitiet izpratnes pārbaudes:

  1. Vai y dalās ar 2 vai nē?
  2. Vai y dalās ar 5 vai nē?

Ja y atbilst abiem nosacījumiem, y tiek pievienots num_list.

6. piemērs: ja… vēl ar saraksta izpratni

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

Kad mēs palaidīsim iepriekš minēto programmu, izeja būs:

 ("Pāra", "Nepāra", "Pāra", "Nepāra", "Pāra", "Nepāra", "Pāra", "Nepāra", "Pāra", "Nepāra")

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.
  • Atcerieties, ka katra saraksta izpratne var tikt pārrakstīta ciklam, bet katra saraksta izpratne nav pārrakstāma saraksta izpratnes veidā.

Interesanti raksti...