flatten list of lists of lists to a list of lists

前端 未结 4 1419
耶瑟儿~
耶瑟儿~ 2020-12-07 03:27

I\'ve already searched SO for how to flatten a list of lists (i.e. here:Making a flat list out of list of lists in Python) but none of the solutions I find addresses flatten

相关标签:
4条回答
  • 2020-12-07 03:53

    For this particular case,

    In [1]: [sum(x,[]) for x in my_list]
    Out[1]: [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
    

    is the shortest and the fastest method:

    In [7]: %timeit [sum(x,[]) for x in my_list]
    100000 loops, best of 3: 5.93 µs per loop
    
    0 讨论(0)
  • 2020-12-07 03:59

    This is an inside-out version of fl00r's recursive answer which coincides more with what OP was after:

    def flatten(lists,n):
        if n == 1:
            return [x for xs in lists for x in xs]   
        else:
            return [flatten(xs,n-1) for xs in lists]
    
    
    >>> flatten(my_list,1)
    [[1, 2, 3], [4, 5], [9], [8, 9, 10], [3, 4, 6], [1]]
    >>> flatten(my_list,2)
    [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
    
    0 讨论(0)
  • 2020-12-07 04:00

    If we apply the logic from this answer, should not it be just:

    In [2]: [[item for subsublist in sublist for item in subsublist] for sublist in my_list]
    Out[2]: [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
    

    And, similarly via itertools.chain():

    In [3]: [list(itertools.chain(*sublist)) for sublist in my_list]
    Out[3]: [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
    
    0 讨论(0)
  • 2020-12-07 04:01

    You could use this recursive subroutine

    def flatten(lst, n):
      if n == 0:
        return lst
    
      return flatten([j for i in lst for j in i], n - 1)
    
    mylist = [ [ [1,2,3],[4,5] ], [ [9],[8,9,10],[3,4,6] ], [ [1] ] ]
    flatten(mylist, 1)
    #=> [[1, 2, 3], [4, 5], [9], [8, 9, 10], [3, 4, 6], [1]]
    flatten(mylist, 2)
    #=> [1, 2, 3, 4, 5, 9, 8, 9, 10, 3, 4, 6, 1]
    
    0 讨论(0)
提交回复
热议问题