当前位置: 首页 > 知识库问答 >
问题:

python3.x - python3.0 列表逆向相加求和?

谷梁驰
2023-11-10

a = [[1,100],[2,23],[6,456],[2,123],[6,456],[2,123],[6,456]]

我需要把所有的数依次相加求和

需要逆向
2和相加
(456+123)/2 = ....
3个相加
(456+123 + 456)/3 =...
.....

最后这些和放到一个列表中

数据量大的情况下,有没有高效的写法。

我用

ct = []                for mas in range(1, len(a)):                    sum_total = 0.0                    for ma in range(mas):                        sum_total += float(a[i - ma][1])                    ema = sum_total/mas                ct.append(ema)

运行的时候 效率 太慢, 有没有高效的方法?

共有2个答案

尹昂雄
2023-11-10

你是指求索引1的后缀和吗

a = [[1,100],[2,23],[6,456],[2,123],[6,456],[2,123],[6,456]]res = [0] * len(a)res[-1] = a[-1][1]for i in range(len(a) - 2, -1, -1):    res[i] = res[i + 1] + a[i][1]print(res)# [1737, 1637, 1614, 1158, 1035, 579, 456]
赫连心思
2023-11-10

首先,理解你的需求是:遍历列表 a,每次累加连续的元素,并将结果存入新的列表。

对于大型数据集,我们确实需要注意代码的效率。你已经尝试了一种方法,但它的效率很低,因为你在每次循环中都从开始到当前位置做了一次完整的遍历。

我们可以尝试一种不同的方法,利用 Python 的 collections 库中的 deque 类型。deque 允许我们从两端添加或删除元素,因此我们可以在添加元素的同时从另一端删除它们,这样我们只需要遍历一次列表。

下面是一种可能的实现:

from collections import dequea = [[1,100],[2,23],[6,456],[2,123],[6,456],[2,123],[6,456]]# 创建一个双端队列dq = deque()# 遍历列表 afor item in a:    # 把每一对数字放入队列    dq.append(item[1])    if len(dq) > 1:  # 确保至少有两个元素        # 从队列中取出两个元素并相加        sum_total = dq.popleft() + dq.popleft()        dq.append(sum_total)  # 把结果放回队列# 现在 dq 中就包含了所有相加的结果ct = list(dq)

这种方法只需要遍历列表一次,因此对于大型数据集来说会更有效率。

 类似资料:
  • 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 Python有6个序列的内置类型,但最常见的是列表和元组。 序列都可以进行的操作包括索引,切片,加,乘,检查成员。 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现

  • a = [i for i in range(1, 8000)] 假如有个这样的列表, 我需要把里面的所有值组合 然后求 组合的总和与100差的最小值。 例如 1和2组合 1+2 =3 与100 差 3-100 == -97 , 1和3组合 1+3-100 = -96 , 1和4组合,1+4-100=-95..... 1+99-100=0 ....依次类推, 1+2+3+4+5+6...+7999-

  • 逆向工程 是模型其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入 MySQL、 PostgreSQL、Oracle、SQLite、SQL Server 或 MariaDB 数据库、模式、表或视图。 Navicat 提供一个步骤的向导让你完成任务: 选择 工具 -> 从数据库导入。 选择连接。 选择你要导入的数据库、模式或表。 点击 开始。 你也可以简单地在 Navicat

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。右击一个已打开的数据库或模式、表或视图并在弹出式菜单

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。按住 Control 键并点按一个已打开的数据库或模

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。右击一个已打开的数据库或模式、表或视图并在弹出式菜单