python - 求前一个数到下一个数的累计和
问题描述
假设我有一个数字列表:
x = [12, 8, 8, 6]
如您所见,第一个数字是 12,所以这个数字和下一个数字 8 的总和是 20。接下来,20 和 8 的总和是 28,依此类推。
我想要的最终输出是:
(12, 20), (20,28), (28, 34)
这是我尝试过的:
from itertools import chain
x = [12,8,8]
it = chain(x,[0])
result = list(x + next(it) for x in it)
print ('\n',result,'\n')
解决方案
这可以在理解中使用赋值表达式来记住最后一个数字:
last_num = x[0]
output = [(last_num, last_num:= last_num+i) for i in x[1:]]
[(12, 20), (20, 28), (28, 34)]
大致相当于:
last_num = x[0]
output = []
for i in x[1:]:
output.append((last_num, last_num + i))
last_num += i
或者,如果您可以导入itertools
,您可以使用acumulate
:
print(*accumulate(x))
12 20 28 34
和zip
和itertools.tee
:
from itertools import accumulate, tee
a, b = tee(accumulate(x))
next(b, None)
output = list(zip(a, b))
[(12, 20), (20, 28), (28, 34)]
推荐阅读
- javascript - 除了给定的字符之外,如何将任何字符序列插入字符串?
- swift - Swift - 后台蓝牙写入特性
- proxy - 在 Single-spa Angular 应用程序中从微应用导航到其他微应用时的代理问题
- ruby-on-rails - Rails 模型:这个对象来自哪里?
- algorithm - 解决大气湍流问题的方法(算法)有哪些?
- python - 在命令行上使用“pip”安装 Python 模块后来自 Visual Studio 的 ModuleNotFoundError
- sharepoint-online - 使用 Microsoft Graph 从 Office 365 中的 sharepoint 文档库中的文件夹下载文件时出现问题
- arrays - 如何在 VB.net 中的子例程之外声明一系列对象
- ruby-on-rails - Rails request.ip 或 request.remote_ip 返回不同的值
- php - Auth:user() 在 Laravel 7 中显示 null 特定于控制器 UserController