Saraksta izpratne programmā Python

List Comprehensions Python



Saraksta izpratni Python bieži izmanto, lai rakstītu vienas rindas paziņojumus, kas izveido jaunu sarakstu vai vārdnīcu, veicot cilpu pār atkārtojamu objektu. Šajā rakstā tiks izskaidrots, kā lietot saraksta izpratni Python, sākot ar pamata skaidrojumu par to, kā cilpas darbojas Python.

Par cilpu Python

A cikla paziņojums Python secīgi atkārto jebkura objekta, saraksta, virknes uc dalībniekus. Salīdzinājumā ar citām programmēšanas valodām tā sintakse ir daudz tīrāka un neprasa manuāli definēt iterācijas darbības un sākt iterāciju. Lai gan ir veidi, kā padarīt tās uzvedību tādu pašu kā citas programmēšanas valodas (šajā rakstā tas netiks aplūkots). Varat arī kontrolēt cilpas, izmantojot tādus paziņojumus kā turpināt, pārtraukt, nodot utt. Tālāk ir sniegts vienkāršs cilpas Python piemērs:







priekšxiekšā diapazons(10):
drukāt(x)

Iepriekš norādītā cilpa drukās desmit skaitļus, sākot no 0 un beidzot ar 9.



Saraksta izpratne

Saraksta izpratne ir nekas cits kā saīsināts / kodolīgs veids, kā vienas rindas paziņojumā ierakstīt cilpas daudzrindās. Saraksta izpratnes piemērs zemāk izveidos jaunu sarakstu kā [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], iekļaujot tajā visas x vērtības.



numurus= [xpriekšxiekšā diapazons(10)]
drukāt (numurus)

Ņemiet vērā, ka saraksta izpratne vienmēr izveido jaunu sarakstu un nemaina izteiksmē izmantotos sākotnējos iterables. Tipiskā saraksta izpratnes izteiksmē ir jābūt klauzulai par, un tai var sekot nosacījuma paziņojumi, ja un citādi. Neizmantojot saraksta izpratni, iepriekš minētais piemērs tiks uzrakstīts šādā veidā:





numurus= []
priekšxiekšā diapazons(10):
numurus.pievienot(x)

drukāt (numurus)

Veiktspēja un lasāmība

Saraksta izpratne ir ātrāka nekā cilpām. Tomēr, ja vien jūs neatkārtojat simtiem tūkstošu vienumu, jūs nepamanīsit būtiskus veiktspējas uzlabojumus. Lai gan saraksta izpratne nodrošina īsu veidu, kā rakstīt cilpām, sarežģītas izteiksmes var izraisīt sliktu koda lasāmību un palielinātu daudzpusību. Ir svarīgi nodrošināt, lai kods būtu lasāms, ja vien maksimāla veiktspēja nav jūsu programmas absolūta nepieciešamība.

Piemērs: saraksta izpratnes sintakses izmantošana ar vārdnīcām un komplektiem

Python vārdnīca ir elementu kopums, kas definēts atslēgu vērtību pāros, savukārt kopa ir unikālu vērtību kolekcija, kur dublikāti nav atļauti. Saraksta izpratni var izmantot arī ar Python vārdnīcām un komplektiem. Sintakse nedaudz atšķiras, tā vietā, lai izteiksmi iesaiņotu kvadrātiekavās, tagad jums būs jāizmanto cirtainās breketes. Jūs arī saņemsiet jaunu vārdnīcu / kopas objektu, nevis jaunu sarakstu.



dati= {'pilsēta':'Ņujorka', 'vārds':'john doe'}

formatēts_dati= {k: v.titulu() priekšuz,viekšādati.preces()}

drukāt (formatēts_dati)

Iepriekš minētais piemērs pārveidos virkņu vērtības virsraksta reģistrā un izveidos jaunu vārdnīcu ar nosaukumu formatēts_dats, kuras iznākums būs: {‘city’: ‘New York’, ‘name’: ‘John ​​Doe’}. Jūs varat arī mainīt vārdnīcu / iestatīt vietā, kreisajā pusē norādot esošo vārdnīcas mainīgo.

dati= {'pilsēta':'Ņujorka', 'vārds':'john doe'}

dati= {k: v.titulu() priekšuz,viekšādati.preces()}

drukāt (dati)

Neizmantojot vārdnīcas izpratni, kods izskatītos šādi:

dati= {'pilsēta':'Ņujorka', 'vārds':'john doe'}

formatēts_dati= {}

priekšuz,viekšādati.preces():
formatēts_dati[uz] =v.titulu()

drukāt (formatēts_dati)

Tā kā komplektos nav atslēgas vērtību pāru, kopu izpratni var definēt tāpat kā saraksta izpratni. Vienīgā atšķirība ir cirtainu lenču izmantošana.

Piemērs: Vairāki cilpām saraksta izpratnē

Iepriekš minētais saraksta izpratnes piemērs ir vienkāršs un paziņojumam izmanto vienu. Zemāk ir piemērs, kas izmanto vairākas cilpām un nosacījuma if.

īpašības vārdi= ['Disks', 'Eoan', 'Fokuss', 'Mākslīgs']

dzīvnieki= ['Dingo', 'Ermine', 'Bedre', 'Bebrs']

kodvārdi= [x +''+ unpriekšxiekšāīpašības vārdipriekšuniekšādzīvniekijaun.ar sākumu(x[0])]

drukāt (kodvārdi)

Kodā kā izvade parādīsies [‘Disco Dingo’, ‘Eoan Ermine’, ‘Focal Fossa’]. Abi cilpām iet pāri īpašības vārdiem un dzīvnieku sarakstiem, un to locekļi tiek apvienoti, izmantojot atstarpi, tikai tad, ja abu vārdu pirmais burts ir vienāds. Neizmantojot saraksta izpratni, kods izskatītos šādi:

īpašības vārdi= ['Disks', 'Eoan', 'Fokuss', 'Mākslīgs']
dzīvnieki= ['Dingo', 'Ermine', 'Bedre', 'Bebrs']

kodvārdi= []

priekšxiekšāīpašības vārdi:
priekšuniekšādzīvnieki:
jaun.ar sākumu(x[0]):
kodvārdi.pievienot(x +''+ un)

drukāt (kodvārdi)

Piemērs: saraksta izpratne ar klauzulu “ja-citādi”

Tālāk sniegtajā piemērā tiks parādīts paziņojuma “if un else” lietojums saraksta izpratnē.

numuru_saraksts= [1, 2, 3, 4]
cits_saraksts= [5, 6, 7, 8]

rezultāts= [Taisnība ja (x + y)%2 == 0 citādi Nepatiess priekšxiekšānumuru_sarakstspriekšuniekšācits_saraksts]

drukāt (rezultāts)

Ciklējot divus sarakstus, iepriekšējā saraksta izpratne pārbauda, ​​vai elementu pāra summa ir vienmērīga vai nē. Izpildot iepriekš minēto kodu, tiks parādīts [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True]. Neizmantojot saraksta izpratni, kods izskatītos šādi:

numuru_saraksts= [1, 2, 3, 4]
cits_saraksts= [5, 6, 7, 8]
rezultāts= []

priekšxiekšānumuru_saraksts:
priekšuniekšācits_saraksts:
ja (x + y)%2 == 0:
rezultāts.pievienot(Taisnība)
citādi:
rezultāts.pievienot(Nepatiess)

drukāt (rezultāts)

Secinājums

Saraksta izpratne nodrošina jauku veidu, kā rakstīt tīrus un kodolīgus cilpas paziņojumus. Tomēr tie var ātri kļūt sarežģīti un grūti saprotami, ja tiek izmantotas vairākas cilpas un nosacījuma paziņojumi. Galu galā runa ir par programmētāja komforta līmeni, taču parasti ir ieteicams uzrakstīt skaidru, lasāmu un viegli atkļūdojamu kodu, nevis pārmērīgi izmantot saīsinājumus.