from collections import defaultdict

def findpairs(arr, target):
    flip = defaultdict(list)
for i, j in enumerate(arr):
    flip[j].append(i)
for i, j in enumerate(arr):
    if target - j in flip:
        yield i, flip[target - j]
Лучший алгоритм (чем использование dict) для перечисления пар с заданной суммой.