Python列表累加

3
所以以下代码读取两个文本文件,每个文件都包含25行25个整数,并将它们分别放入两个列表中:
num_DIR = '/path/to/num.txt'
den_DIR = '/path/to/den.txt'

def makeList(DIR):
    list = []
    for line in open(DIR).readlines():
            list.append(line.strip())
    return list

num_list = makeList(num_DIR)
den_list = makeList(den_DIR)

输出:

num_list = ['76539', '100441', '108637', '108874', '103580', '91869', '78458', '61955', '46100', '32701', '21111', '13577', '7747', '4455', '2309', '1192', '554', '264', '134', '63', '28', '15', '12', '7', '5']

den_list = ['621266', '496647', '436229', '394595', '353249', '305882', '253983', '199455', '147380', '102872', '67255', '41934', '24506', '13778', '7179', '3646', '1778', '816', '436', '217', '114', '74', '49', '44', '26']

我该如何将两个列表中的每个值都变成其后所有值的累加和,就像一个累加列表一样?


1
哪个Python版本? - roippi
3
你似乎没有在那个方向上做出任何努力;这不是一个编码服务。首先,你应该使用整数而不是字符串。 - jonrsharpe
你真的希望每个值都是其后面所有值的总和,而不是其前面的值,例如['1','2','3']->['6','5','3'] - martineau
3个回答

4

如果性能不是关键,您还可以使用sum和列表推导式:

>>> num_list=[1,2,3]
>>> [sum(num_list[:y]) for y in range(1, len(num_list) + 1)]
[1, 3, 6]

4
你似乎希望在每个元素之后,将所有值的总和计算出来直到列表结尾。
summed=[]
den_list = map(int,den_list)
for i,j in enumerate(den_list[:-1]):
    summed += j,sum(den_list[i+1:])

如果您不想保留列表中的原始值

summed=[sum(num_list[i+1:])for i,j in enumerate(num_list[:-1])]

总和列表推导式正是我所需要的! - Sean
没问题,不用谢。 - Padraic Cunningham

3
如果您运行的是Python 3.2或更高版本,则可以在itertools.accumulate中使用内置功能。
如果您运行的是早于该版本的版本,则文档中提供的纯Python等效项同样有效(尽管速度不及C语言)。
def accumulate(iterable, func=operator.add):
    'Return running totals'
    # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
    # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
    it = iter(iterable)
    total = next(it)
    yield total
    for element in it:
        total = func(total, element)
        yield total

示例:

from itertools import accumulate

list(accumulate(map(int,num_list)))
Out[3]: 
[76539,
 176980,
 285617,
 394491,
 498071,
 589940,
 668398,
 730353,
 776453,
 809154,
 830265,
 843842,
 #snip...,
 860627
]

请注意,您需要将所有这些字符串转换为“int”,就像我使用“map”一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接