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

Discussion in 'Python' started by MetalOne, Feb 22, 2004.

  1. MetalOne

    MetalOne Guest

    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
    ....
    [[1, 2, 3, 4], [5, 6]]
     
    MetalOne, Feb 22, 2004
    #1
    1. Advertisements

  2. 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:

    HTH,
    Shalabh
     
    Shalabh Chaturvedi, Feb 22, 2004
    #2
    1. Advertisements

  3. MetalOne

    Terry Reedy Guest

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

    tjr
     
    Terry Reedy, Feb 22, 2004
    #3
  4. 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]]
     
    Elaine Jackson, Feb 22, 2004
    #4
  5. MetalOne

    MetalOne Guest

    Thanks, just what I was looking for.
     
    MetalOne, Feb 22, 2004
    #5
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.