Я написал грубое решение.
Это определенно можно сделать за O (n ^ 2).
Вы не должны сортировать это.
Это расширение проблемы, которое требует суммирования двух чисел в х, а хитрость заключается в использовании хеш-таблицы.
def triplets(l, total):
"""Sum of 3 numbers to get to total
Basically an extension of the 2 table
"""
l = set( l)
d = { }
for i in l:
remain = total - i
inside = {}
for j in l:
if i == j:
continue
inside[j] = remain -j
d[i] = inside
good = set()
for first, dic in d.iteritems():
for second, third in dic.iteritems():
if third in l:
good.add( tuple(sorted([first, second, third])) )
for each in good:
print each
triplets( [2, 3, 4, 5, 6], 3+4+5)
ПРИМЕЧАНИЕ: мы можем использовать метод быстрой сортировки для триплетов, который будет O (1).