Is there an easier way to break a list into sub groups

M

MetalOne

The following does what I want, but I feel like this could maybe be a
one liner.
I just can't think of anything shorter.
If there is nothing shorter, does this seem like a candidate for
inclusion in the standard library somewhere.
"""l is an input list.
n is the size of the sub group
returns a list of the sub groups
"""
.... i=0
.... g = []
.... while i < len(l):
.... g.append(l[i:i+n]) #append sub group to g
.... i+=n
.... return g
....
l = [1,2,3,4,5,6]
groups(l,2) [[1, 2], [3, 4], [5, 6]]
groups(l,3) [[1, 2, 3], [4, 5, 6]]
groups(l,4)
[[1, 2, 3, 4], [5, 6]]
 
S

Shalabh Chaturvedi

MetalOne said:
The following does what I want, but I feel like this could maybe be a
one liner.
I just can't think of anything shorter.
If there is nothing shorter, does this seem like a candidate for
inclusion in the standard library somewhere.
"""l is an input list.
n is the size of the sub group
returns a list of the sub groups
"""
... i=0
... g = []
... while i < len(l):
... g.append(l[i:i+n]) #append sub group to g
... i+=n
... return g
...
l = [1,2,3,4,5,6]
groups(l,2) [[1, 2], [3, 4], [5, 6]]
groups(l,3) [[1, 2, 3], [4, 5, 6]]
groups(l,4)
[[1, 2, 3, 4], [5, 6]]

It's generally considered more Pythonic to use the range() function instead
of incrementing counters while looping. Also, list comprehensions are a
useful tool. These combined give us one possible solution:
l = range(10)
n = 2
[l[i:i+n] for i in range(0, len(l), n)] [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
n = 3
[l[i:i+n] for i in range(0, len(l), n)] [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]


HTH,
Shalabh
 
T

Terry Reedy

MetalOne said:
The following does what I want, but I feel like this could maybe be a
one liner.
I just can't think of anything shorter.
If there is nothing shorter, does this seem like a candidate for
inclusion in the standard library somewhere.
"""l is an input list.
n is the size of the sub group
returns a list of the sub groups
"""
... i=0
... g = []
... while i < len(l):
... g.append(l[i:i+n]) #append sub group to g
... i+=n
... return g
...
l = [1,2,3,4,5,6]
groups(l,2) [[1, 2], [3, 4], [5, 6]]
groups(l,3) [[1, 2, 3], [4, 5, 6]]
groups(l,4)
[[1, 2, 3, 4], [5, 6]]

I believe there was a thread on this very question perhaps 6 months ago.
Maybe you can find it on Google.

tjr
 
E

Elaine Jackson

groups = lambda L,n: [L[i*n:(i+1)*n] for i in range(len(L)) if L[i*n:(i+1)*n]]

HTH


| The following does what I want, but I feel like this could maybe be a
| one liner.
| I just can't think of anything shorter.
| If there is nothing shorter, does this seem like a candidate for
| inclusion in the standard library somewhere.
|
| >>> def groups(l, n):
| """l is an input list.
| n is the size of the sub group
| returns a list of the sub groups
| """
| ... i=0
| ... g = []
| ... while i < len(l):
| ... g.append(l[i:i+n]) #append sub group to g
| ... i+=n
| ... return g
| ...
| >>> l = [1,2,3,4,5,6]
| >>> groups(l,2)
| [[1, 2], [3, 4], [5, 6]]
| >>> groups(l,3)
| [[1, 2, 3], [4, 5, 6]]
| >>> groups(l,4)
| [[1, 2, 3, 4], [5, 6]]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,002
Messages
2,570,258
Members
46,858
Latest member
FlorrieTuf

Latest Threads

Top