如何高效、简短地添加分部表的列?

How do I efficiently and briefly add columns of a partial table?

提问人:Jaeho Choi 提问时间:11/9/2023 最后编辑:XMehdi01Jaeho Choi 更新时间:11/9/2023 访问量:44

问:

我想使用原生 python 并尽可能多地编写简洁的代码来实现这一点。 因此,表 A 如下所示:

|1 |2 |3 |

|4 |5 |6 |

然后列表 A 给出如下

A = [[1, 2, 3], [4, 5, 6]]

假设任务是将 A 的前两列相加到一个列表 B 中。

我尝试了使用嵌套 for 循环的幼稚方法。(有效)

n = 2
B = [0] * n
for row in range(len(A)):
    for col in range(n):
        B[col] += A[row][col]

我尝试了列表理解

B = [sum(x) for x in zip(*A)][:n]

但问题是我不想遍历所有列,然后拆分列表 B。我想避免以后会被扔掉的计算元素。

解决此任务的最有效和最简洁的方法是什么?

python list for 循环

评论

0赞 user19077881 11/9/2023
这是一个列表列表,而不是表格,没有行也没有列,Numpy 是显而易见的方法,但您似乎只想要基本的 Python,当您强加类似列的思维时,这将不可避免地更加复杂。
1赞 Jaeho Choi 11/9/2023
文章中提到的@user19077881表及其行和列是指表及其行和列的一般概念,并不特定于编程语言
0赞 user19077881 11/9/2023
我知道那件事。但是,考虑 Python 列表的行和列可能会导致更复杂的数据纠结。列表是可以使用索引访问的值序列。

答:

1赞 mkrieger1 11/9/2023 #1

为了避免在列表推导式中计算不必要的值,您需要切片,而不是最终列表。zip(*A)

由于返回的是迭代器,而不是列表,因此不能使用 .zip[:n]

但是你可以使用 itertools.islice

from itertools import islice

B = [sum(x) for x in islice(zip(*A), n)]

评论

0赞 XMehdi01 11/9/2023
A未在代码中定义
0赞 mkrieger1 11/9/2023
@XMehdi01 我假设使用了问题中代码中的定义。
0赞 XMehdi01 11/9/2023 #2

我的代码 ,转置原始矩阵,然后列表推导式将每个转置行中的前 n 个元素求和。zip(*A)

A = [[1, 2, 3], [4, 5, 6]]
n = 2
B = [sum(row[:n]) for row in zip(*A)][:-1]
print(B)
#[5, 7]