You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用一行嵌套列表推导式处理二维列表运算与子列表求和问题

解决二维列表元素运算并按子列表求和的问题

嘿,我懂你遇到的困扰了——你之前写的列表推导式把二维列表直接展平成一维了,自然没法按原来的子列表分组求和对吧?

问题根源

你写的b = [y*exp(-y) for x in a for y in x]用了同一层级的两层循环,这会把原二维列表里的所有元素都平铺到一个一维列表里,破坏了原有的子列表结构,所以后续没法按子列表求和。

正确解决方法

我们需要用嵌套的列表推导式来保持原列表的二维结构,分两种场景:

1. 先得到二维列表b,再求和得到c

先保留每个子列表的结构,对每个子列表里的元素单独运算:

from math import exp

a = [[4, 3, 1], [-1, -2, -3]]
# 生成二维结果列表b
b = [[y * exp(-y) for y in sublist] for sublist in a]
# 对b的每个子列表求和得到c
c = [sum(sublist) for sublist in b]

运行后:

  • b的结果是[[0.07326, 0.14936, 0.36788], [-2.71828, -14.77811, -60.25661]](保留了原二维结构)
  • c的结果是[0.59049, -77.753],和你给出的示例一致。

2. 一步到位直接生成列表c

如果不需要保留中间结果b,可以直接把每个子列表的运算和求和合并成一行推导式:

from math import exp

a = [[4, 3, 1], [-1, -2, -3]]
c = [sum(y * exp(-y) for y in sublist) for sublist in a]

这里内层用了生成器表达式(没有方括号)传给sum(),比先生成子列表再求和更高效,最终直接得到你想要的求和结果。

核心要点

列表推导式的层级决定了结果的结构:外层循环对应原列表的子列表,内层循环/生成器对应子列表的元素,这样就能完美保留原有的二维分组,而不会被展平。

内容的提问来源于stack exchange,提问作者Camilo Ruiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:02