Python - 不等长列表的列求和


什么是列求和

列求和指的是计算数据集或矩阵中每一列的值之和的过程。在数据分析或数值计算的背景下,列求和是用于沿垂直轴汇总和分析数据的常用操作。

例如,考虑一个以表格形式表示的数据集,其中包含行和列。每一列对应一个变量或特征,每一行对应一个观测值或数据点。列求和涉及将每一列中的值加起来,以获得每个变量的单个总和。让我们用一个例子来说明这一点。

假设我们有以下数据集,表示五个人在三次不同测量中的身高(以厘米为单位)。

测量 1 测量 2 测量 3
0 170 175 180
1 165 168 172
2 180 182 178
3 172 169 171
4 175 176 174

要计算列求和,我们必须将每一列中的值加起来。

列求和

  • 测量 1:862

  • 测量 2:870

  • 测量 3:875

在这种情况下,列求和提供了每次测量的总高度,使我们能够概览每个变量中的累积值。

当您拥有不等长的列表并希望在 Python 中计算每一列的列总和时,我们可以使用不同的方法。以下列出了三种实现此目的的方法。

使用循环和填充列表

在这种方法中,我们可以循环遍历列表并对每一列的值求和,同时考虑列表的长度可能不同。我们需要用零填充较短的列表以使其长度相等。

示例

在此示例中,我们首先使用`max(len(lst) for lst in lists)`找到所有列表中的最大长度。然后,我们使用列表推导式用零填充每个列表以匹配最大长度。填充后,我们可以使用`zip(*padded_lists)`转置列表,最后,我们使用另一个列表推导式计算列总和。

lists = [
   [1, 2, 3],
   [4, 5],
   [6, 7, 8, 9]
]
max_length = max(len(lst) for lst in lists)
padded_lists = [lst + [0] * (max_length - len(lst)) for lst in lists]
column_sum = [sum(col) for col in zip(*padded_lists)]
print("The column summation of uneven sized lists:",column_sum)

输出

The column summation of uneven sized lists: [11, 14, 11, 9]

使用 Itertools.zip_longest() 函数

来自 `itertools` 模块的`zip_longest`函数允许我们将不等长列表压缩在一起,并用指定默认值(在本例中为 0)填充缺失的值。

示例

在此示例中,`zip_longest(*lists, fillvalue=0)`用填充压缩列表,然后我们使用列表推导式计算列总和,这与之前的方法类似。

from itertools import zip_longest
lists = [
   [1, 2, 3],
   [4, 5],
   [6, 7, 8, 9, 10]
]
column_sum = [sum(col) for col in zip_longest(*lists, fillvalue=0)]
print("The column summation of uneven sized lists:",column_sum)

输出

The column summation of uneven sized lists: [11, 14, 11, 9, 10]

使用 NumPy

NumPy提供了一种优雅的方法来处理不等长列表,而无需显式填充。即使列表长度不同,它也会自动广播列表以执行求和操作。

示例

在此示例中,我们使用`np.array(lists)`将列表列表转换为 NumPy 数组,其中每一行表示一个列表。然后,我们使用`np.sum(arr, axis=0)`沿第一个轴(即行)计算总和,这有效地为我们提供了列总和。

import numpy as np
lists = [
   [1, 2, 3],
   [4, 5],
   [6, 7, 8, 9]
]
arr = np.array(lists, dtype=object )
column_sum = np.sum(arr, axis=0)
print("The column summation of uneven sized lists:",column_sum)

输出

The column summation of uneven sized lists: [1, 2, 3, 4, 5, 6, 7, 8, 9]

更新于: 2024年1月2日

56 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告