Viac na
Ako rozdeliť zoznam na rovnomerne veľké časti?
Mám zoznam ľubovoľnej dĺžky a potrebujem ho rozdeliť na rovnako veľké časti a pracovať s ním. Existuje niekoľko zrejmých spôsobov, ako to urobiť, napríklad viesť počítadlo a dva zoznamy, a keď sa druhý zoznam naplní, pridať ho do prvého zoznamu a vyprázdniť druhý zoznam pre ďalšie kolo údajov, ale to je potenciálne veľmi nákladné.
Zaujímalo ma, či má niekto dobré riešenie pre zoznamy ľubovoľnej dĺžky, napr. pomocou generátorov.
Hľadal som niečo užitočné v itertools
, ale nič zjavne užitočné som nenašiel. Možno som to však prehliadol.
Súvisiaca otázka: Aký je najviac "pythonický" spôsob iterácie nad zoznamom po častiach?
2047
3
Tu je generátor, ktorý vám poskytne požadované časti:
Ak používate Python 2, mali by ste použiť
xrange()
namiestorange()
:Namiesto písania funkcie môžete tiež jednoducho použiť chápanie zoznamu, hoci je dobré zapuzdriť takéto operácie do pomenovaných funkcií, aby bol váš kód zrozumiteľnejší. Python 3:
Verzia Python 2:
Tu je generátor, ktorý pracuje s ľubovoľnými iterovateľnými tabuľkami:
Príklad:
Ak poznáte veľkosť zoznamu:
Ak nie (iterátor):
V druhom prípade sa to dá preformulovať krajším spôsobom, ak si môžete byť istí, že postupnosť obsahuje vždy celý počet kusov danej veľkosti (t. j. neexistuje neúplný posledný kus).