7 votes

Prenez chaque bloc n de la liste

Étant donné une liste :

import string
a = list(string.ascii_lowercase)

Quelle est la façon Pythonique de retourner chaque nième bloc de m éléments ? Notez que cela est différent de simplement retourner chaque nième élément.

Résultat souhaité de prendre chaque 1er des 3 blocs de 3 éléments (prendre 3, sauter 6, prendre 3, sauter 6...) :

['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']

Je peux y arriver comme suit :

import itertools
s1 = a[::9]
s2 = a[1::9]
s3 = a[2::9>    
res = list(itertools.chain.from_iterable(zip(s1,s2, s3)))

Y a-t-il une manière plus propre de le faire ?

0voto

Jeronimo Points 1347

Utilisation de la compréhension de liste incompréhensible :D

m, n = 3, 3
[elem for blockstart in range(0, len(a), m*n) for elem in a[blockstart:blockstart+n]]    
#> ['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X