Vairāk
Kā sadalīt sarakstu vienāda lieluma daļās?
Man ir patvaļīga garuma saraksts, un man tas jāsadala vienāda lieluma gabalos un ar to jādarbojas. Ir daži acīmredzami veidi, kā to izdarīt, piemēram, saglabāt skaitītāju un divus sarakstus, un, kad otrais saraksts piepildās, pievienot to pirmajam sarakstam un iztukšot otro sarakstu nākamajai datu kārtai, bet tas ir potenciāli ārkārtīgi dārgi.
Mani interesēja, vai kādam ir labs risinājums, kā to izdarīt jebkura garuma sarakstiem, piemēram, izmantojot ģeneratorus.
Es meklēju kaut ko noderīgu itertools
, bet neko acīmredzami noderīgu nevarēju atrast. Iespējams, ka esmu kaut ko palaidis garām.
Saistīts jautājums: Kāds ir "pitoniskākais" veids, kā iterēt sarakstu pa daļām?.
2047
3
Šeit ir ģenerators, kas ļauj iegūt vēlamos gabaliņus:
Ja izmantojat Python 2, jums vajadzētu izmantot
xrange()
, nevisrange()
:Varat arī vienkārši izmantot saraksta izpratni, nevis rakstīt funkciju, lai gan šāda veida operācijas ir labi iekapsulēt nosauktās funkcijās, lai jūsu kods būtu vieglāk saprotams. Python 3:
Python 2 versija:
Šeit ir ģenerators, kas darbojas ar patvaļīgām iterablēm:
Piemērs:
Ja jūs zināt saraksta lielumu:
Ja nezini (iterators):
Pēdējā gadījumā to var pārfrāzēt skaistāk, ja var būt pārliecināts, ka secībā vienmēr ir vesels skaits dotā lieluma gabalu (t.i., nav nepilnīga pēdējā gabala).