Вам не нужно хранить индекс вообще, потому что проблема двух сумм не связана с , где находится число, просто с их поиском.Это можно сделать следующим образом:
target = 6
numbers = [1, 5, 11, -5, 2, 4, 6, 7, 21]
hashTable = {}
results = []
for n in numbers:
if ((target - n) in hashTable and hashTable[target - n] == None):
hashTable[target - n] = n
else:
hashTable[n] = None
results = [[k, v] for k, v in hashTable.items() if v != None]
print(results)
В случае, если вы хотите, чтобы индекс ваших чисел, вы могли бы добавить второй словарь indices
:
indices = {}
for i, n in enumerate(numbers):
if ((target - n) in hashTable and hashTable[target - n] == None):
hashTable[target - n] = n
else:
hashTable[n] = None
indices[n] = i
results = [[indices[k], indices[v]] for k, v in hashTable.items() if v != None]
print(results)
Обратите внимание, что для обоихиз этих решений для работы, вы должны гарантировать, что каждый элемент появляется в списке только один раз.В противном случае ваши суммы были бы неоднозначными.Вы можете изменить indices
для хранения списка индексов, в которых встречается конкретное значение, и это решит эту проблему.