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)
运行的时候 效率 太慢, 有没有高效的方法?
你是指求索引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]
首先,理解你的需求是:遍历列表 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 主窗口使用逆向工程创建一个新模型。右击一个已打开的数据库或模式、表或视图并在弹出式菜单