Как найти пару чисел в списке, которая составляет сумму заданного числа - PullRequest
1 голос
/ 14 февраля 2020

Несколько дней назад я столкнулся с проблемой, которая гласит, что есть список чисел и значение, называемое итогом. Теперь нам нужно написать программу, которая выдает список кортежей (только 2 элемента в кортеже), и сумма каждого кортежа должна быть равна значению total. Пример: следующий ввод:

input = [1,2,3,4,6,7,8,9] 
total = 10

следующий вывод:

output = [(1,9), (2,8), (3,7), (4,6)]

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Использование списка со значением itertools.combinations:

>>> import itertools
>>> inpt = [1,2,3,4,6,7,8,9]
>>> total = 10
>>> [p for p in itertools.combinations(inpt, 2) if sum(p) == total]
[(1, 9), (2, 8), (3, 7), (4, 6)]

Обратите внимание, что вы не должны использовать input в качестве имени переменной, так как оно скрывает встроенную функцию input().

Чтобы сделать это без itertools, мы можем использовать следующее понимание списка:

>>> [(inpt[i],inpt[j]) for i in range(len(inpt)) for j in range(i+1, len(inpt)) if sum((inpt[i],inpt[j])) == total]
>>> [(1, 9), (2, 8), (3, 7), (4, 6)]
0 голосов
/ 14 февраля 2020

Вы можете найти разницу и проверить, является ли значение частью оставшегося списка, следующим образом -

>>> [(index,i) for index,i in enumerate(input)] #how enumerate works
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 6), (5, 7), (6, 8), (7, 9)]
>>> [(i,total-i) for index,i in enumerate(input) if (total-i) in input[index+1:]]
[(1, 9), (2, 8), (3, 7), (4, 6)]
...