Hvordan deler du opp en liste i like store biter?
Jeg har en liste av vilkårlig lengde, og jeg må dele den opp i like store biter og operere på den. Det er noen åpenbare måter å gjøre dette på, som å ha en teller og to lister, og når den andre listen fylles opp, legge den til den første listen og tømme den andre listen for neste runde med data, men dette er potensielt ekstremt dyrt.
Jeg lurte på om noen hadde en god løsning på dette for lister av hvilken som helst lengde, f.eks. ved hjelp av generatorer.
Jeg lette etter noe nyttig i itertools
, men jeg kunne ikke finne noe åpenbart nyttig. Kan ha gått glipp av det, skjønt.
Relatert spørsmål: Hva er den mest "pytoniske" måten å iterere over en liste i biter?
2047
3
Her er en generator som gir de bitene du vil ha:
Hvis du bruker Python 2, bør du bruke
xrange()
i stedet forrange()
:Du kan også bare bruke listeforståelse i stedet for å skrive en funksjon, selv om det er en god idé å innkapsle operasjoner som dette i navngitte funksjoner slik at koden din er lettere å forstå. Python 3:
Python 2 versjon:
Her er en generator som fungerer på vilkårlige iterables:
Eksempel:
Hvis du kjenner listestørrelsen:
Hvis du ikke gjør det (en iterator):
I sistnevnte tilfelle kan det omformuleres på en vakrere måte hvis du kan være sikker på at sekvensen alltid inneholder et helt antall biter av gitt størrelse (dvs. at det ikke er noen ufullstendig siste bit).