代码之家  ›  专栏  ›  技术社区  ›  Dmitriy Kisil

如何将列表中的每个元素替换为列表中元素的总和,直至包含元素的位置[重复]

  •  0
  • Dmitriy Kisil  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个包含每月天数的列表:

    month = [31,28,31,30,31,30,31,31,30,31,30,31]
    

    我想转换上面的列表。新列表中的每个元素等于特定位置中所有元素的总和。例如,第一个元素应该是相同的(31),第二个元素应该是28+31,第三个元素应该是31+28+31,依此类推。 期望输出:

    month = [31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
    

    怎么做?我用for循环和append方法尝试了变体,但没有成功。

    1 回复  |  直到 6 年前
        1
  •  2
  •   sacuL    6 年前

    虽然这个没有标签 numpy 我想你会从中受益匪浅 np.cumsum (累积和)而不是循环:

    import numpy as np
    
    np.cumsum(month)
    
    array([ 31,  59,  90, 120, 151, 181, 212, 243, 273, 304, 334, 365])
    

    或者,您可以使用此列表理解:

    [sum(month[:i+1]) for i in range(len(month))]
    
    [31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
    

    正如@patrickhaugh指出的,您也可以使用 itertools.accumulate :

    import itertools
    
    # Cast it to list to see results (not necessary depending upon what you want to do with your results)
    list(itertools.accumulate(month))
    
    [31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]