Добавление элементов 2D-списка, имеющих функции вместо чисел - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь решить проблему, которая требует добавления различных функций в список 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))

1 Ответ

2 голосов
/ 30 января 2020

Определите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...