提问人:Jaeho Choi 提问时间:11/9/2023 最后编辑:XMehdi01Jaeho Choi 更新时间:11/9/2023 访问量:44
如何高效、简短地添加分部表的列?
How do I efficiently and briefly add columns of a partial table?
问:
我想使用原生 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。我想避免以后会被扔掉的计算元素。
解决此任务的最有效和最简洁的方法是什么?
答:
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]
上一个:拓扑排序?不使用 Topsort
下一个:索引函数给了我重复的响应
评论