python - 添加具有函数而不是数字的二维列表的项目
问题描述
我正在尝试解决一个需要将不同功能放入 2D 列表的问题。我已经准备好 2D 列表,在工作的最后阶段,我需要将所有函数添加到不同的行中以得到最终函数。一旦我想添加我的列表中的不同项目(它们是函数)。
我收到一个类型错误:
TypeError: unsupported operand type(s) for +: 'function' and 'function'.
有没有办法在这种情况下添加列表项?
这是我的代码的简化版本,用于复制错误:
A = [([0] * 2) for row in range(2)]
A[0][0] = lambda x: x
A[0][1] = lambda x: x + 1
A[1][0] = lambda x: x + 2
A[1][1] = lambda x: x + 3
test = A[0][0] + A[0][1]
print(test(1))
解决方案
定义test
为一个新的lambda
:
A = [([0] * 2) for row in range(2)]
A[0][0] = lambda x: x
A[0][1] = lambda x: x + 1
A[1][0] = lambda x: x + 2
A[1][1] = lambda x: x + 3
test = lambda x: A[0][0](x) + A[0][1](x)
print(test(1))
# 3
如果你连续有两个以上的元素,这可能很乏味,所以使用functools.reduce
:
from functools import reduce
test_red = reduce(lambda x, y: lambda z: x(z) + y(z), A[0])
print(test_red(1))
# 3
所以最后,为每一行生成简化的函数:
from functools import reduce
test_all = [reduce(lambda x, y: lambda z: x(z) + y(z), a) for a in A]
print(test_all[0](1))
# 3
print(test_all[1](1))
# 7
推荐阅读
- image-processing - 大约在另一个图像中定位一个图像
- javascript - 如何循环承诺?
- magento - 如何在magento 2中删除购物车页面中的产品价格和小计金额
- mysql - 通过 brew 安装的 MySQL 5.7 现在出现错误!服务器退出而不更新 PID 文件 (/usr/local/var/mysql/dev_box.local.pid)
- ruby-on-rails - undefined method `reviews' for #
- javascript - toastrjs - 悬停后更新计时器
- java - 运行命令“mvn clean package”时出现错误 jython
- python - 如何让 python 读取 txt 文件中的每一行并制作单独的列表?
- react-native - 在按钮上打开 react-native Modal 单击操作表选项
- http - YouTube HTTP 429 仅在一台 PC 上的请求过多?