代码之家  ›  专栏  ›  技术社区  ›  tavalendo

追加累计列表python

  •  -6
  • tavalendo  · 技术社区  · 7 年前

    我试图以如下的方式扩展列表:

    # Consider the following list of lists
    l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]
    

    预期结果是:

    l_extended = [ [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
    

    所以基本上列表的大小在连续扩展之后保持不变。

    编辑:

    以下是我最初做的:

    l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]
    lista = []
    for i in l_Of_l:
        lista.extend(i)
        print(list([i for i in lista]))
    

    但结果是:

    [1]
    [1, 2]
    [1, 2, 3]
    [1, 2, 3, 4]
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5, 6]
    [1, 2, 3, 4, 5, 6, 7]
    

    有人知道如何以正确的方式实现这一点吗?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Bill M.    7 年前

    不使用itertools的一种方法是使用python的 sum 函数连接列表。

    >>> L =  [ [1], [2], [3], [4], [5], [6], [7] ]
    >>> L_extend = [ sum(L[0:i+1], []) for i in range(len(L)) ]
    
        2
  •  4
  •   kantal    7 年前

    使用ITertools中的累积:

    list(itertools.accumulate(l_Of_l))                                                                                              
    Out: 
    [[1],
     [1, 2],
     [1, 2, 3],
     [1, 2, 3, 4],
     [1, 2, 3, 4, 5],
     [1, 2, 3, 4, 5, 6],
     [1, 2, 3, 4, 5, 6, 7]]
    
        3
  •  1
  •   timgeb    7 年前

    你需要一个累积和,只需要列表。 itertools.accumulate 可以做到这一点。

    >>> from itertools import accumulate
    >>> lst = [[1], [2], [3], [4], [5], [6], [7]]
    >>> list(accumulate(lst))
    [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
    
        4
  •  1
  •   RoadRunner    7 年前

    您还可以创建一个简单的列表理解:

    >>> from operator import itemgetter
    >>> l_Of_l = [[1], [2], [3], [4], [5], [6], [7]]
    >>> [list(map(itemgetter(0), l_Of_l[:i+1])) for i in range(len(l_Of_l))]
    [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
    
    推荐文章