因此,下面的代码读取两个文本文件,这两个文件都包含25个int,共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']我如何使两个列表中的每个值都是它后面所有值的相加和,就像在累加表中一样?
发布于 2014-06-19 03:24:26
您似乎想要每个元素之后列表末尾的所有值的总和
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])]发布于 2014-06-19 03:08:33
如果性能不是很重要,您还可以使用sum和列表理解:
>>> num_list=[1,2,3]
>>> [sum(num_list[:y]) for y in range(1, len(num_list) + 1)]
[1, 3, 6]发布于 2014-06-19 03:09:15
如果您运行的是Python3.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
]请注意,您需要将所有这些字符串转换为ints,就像我对map所做的那样。
https://stackoverflow.com/questions/24293224
复制相似问题