如何用指定公式处理二维列表元素并返回二维列表(列表推导式实现)
二维列表的高斯核值计算(列表推导式实现)
问题背景
给定如下二维坐标列表:
lst = [[(-1, -1), (-1, 0), (-1, 1)], [(0, -1), (0, 0), (0, 1)], [(1, -1), (1, 0), (1, 1)]]
需要为每个坐标元组(x,y)计算对应数值,规则如下:
- 通用公式:
(1 / (math.pi * 40.5)) * math.e ** -((x ** 2 + y ** 2) / 40.5) - 特殊情况:坐标
(0,0)固定返回1.5
目标是直接生成二维列表形式的结果,目前通过嵌套循环得到了一维列表,但使用列表推导式时多次出现语法错误,需要正确的实现方式。
解决方案
使用嵌套列表推导式可以直接匹配原列表的二维结构,同时处理特殊坐标的判断。实现代码如下:
import math # 原始二维坐标列表 lst = [[(-1, -1), (-1, 0), (-1, 1)], [(0, -1), (0, 0), (0, 1)], [(1, -1), (1, 0), (1, 1)]] # 嵌套列表推导式生成结果二维列表 result = [ [ 1.5 if (x, y) == (0, 0) else (1 / (math.pi * 40.5)) * math.e ** -((x**2 + y**2) / 40.5) for (x, y) in sublist ] for sublist in lst ] # 打印结果 print(result)
运行结果
执行后会输出符合要求的二维列表:
[ [-0.007480807217716918, -0.007667817778372781, -0.007480807217716918], [-0.007667817778372781, 1.5, -0.007667817778372781], [-0.007480807217716918, -0.007667817778372781, -0.007480807217716918] ]
说明
嵌套列表推导式的结构完全对应原二维列表:
- 外层推导式遍历原列表的每个子列表
- 内层推导式遍历子列表中的每个坐标元组,通过条件判断优先处理
(0,0)的特殊值,其余坐标按公式计算 - 这种写法无需额外转换一维列表,直接生成目标二维结构,代码简洁高效
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

