хитрое имя и непонятное имя ...
Моя проблема заключается в следующем:
import itertools
t0 = 0
tf = 1000000
# inputs_to_compute = list-like of size 2 to 6 of objects
results = [[] for i in range(len(inputs_to_compute))]
for subset in itertools.combinations(inputs_to_compute, 2):
r1, r2 = compute(subset[0], subset[1], t0, tf)
results[inputs_to_compute.index(subset[0])] += list(r1)
results[inputs_to_compute.index(subset[1])] += list(r2)
Этот код создает столько списков результатов, сколько имеется входных данных. Каждый вход фактически связан со списком. Затем вычисление выполняется 2 на 2 (для каждого подмножества), и результат добавляется в соответствующий список.
Это работает хорошо, пока нет повторений во входных данных, потому что метод index
возвращает первое вхождение элемента. Как я могу реализовать это по-другому (и эффективно, производительность является одной из основных проблем, с которыми я сталкиваюсь) таким образом, чтобы управлять копиями?
Пустой пример:
import itertools
def compute(x, y):
return (x + y, x - y)
inputs_to_compute = [1, 1, 3]
results = [[] for i in range(len(inputs_to_compute))]
for subset in itertools.combinations(inputs_to_compute, 2):
r1, r2 = compute(subset[0], subset[1])
results[inputs_to_compute.index(subset[0])].append(r1)
results[inputs_to_compute.index(subset[1])].append(r2)
Выход:
[[2, 0, 4, 4], [], [-2, -2]]
Ожидаемый результат:
# Iteration (1, 1): r1 = 2, r2 = 0
results = [[2], [0], []]
# Iteration (1, 3): r1 = 4, r2 = -2
results = [[2, 4], [0], [-2]]
# Iteration (1, 3): r1 = 4, r2 = -2
results = [[2, 4], [0, 4], [-2, -2]]