Если вы пытаетесь найти ответ для нескольких целых чисел с длинным списком, который имеет повторяющиеся значения, я бы рекомендовал использовать frozenset. «Проверенный» ответ получит только первый ответ, а затем остановится.
import numpy as np
numbers = np.random.randint(0, 100, 1000)
target = 17
def adds_to_target(base_list, target):
return_list = []
for i in range(len(base_list)):
return_list.extend([list((base_list[i], b)) for b in base_list if (base_list[i] + b)==target])
return set(map(frozenset, return_list))
# sample output
{frozenset({7, 10}),
frozenset({4, 13}),
frozenset({8, 9}),
frozenset({5, 12}),
frozenset({2, 15}),
frozenset({3, 14}),
frozenset({0, 17}),
frozenset({1, 16}),
frozenset({6, 11})}
1) В первом цикле for списки, содержащие два целых числа, которые суммируются с целевым значением, добавляются в «return_list», т.е. создается список списков.
2) Затем Frozenset вынимает все дубликаты пар.
%timeit adds_to_target(numbers, target_number)
# 312 ms ± 8.86 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)