Программа Python для поиска всех возможных пар с заданной суммой

| | | | | | | | | | | |

Примеры:

Ввод:  lst = [1, 5, 3, 7, 9] K = 12 Вывод:  [(5, 7), (3, 9)] Ввод:  lst = [2, 1, 5, 7, -1, 4] K = 6 Вывод:  [(2, 4), (1, 5), (7, -1)] 

Способ №1: Pythonic Naive

Это наивный подход к вышеуказанной проблеме. Во-первых, мы берем пустой список ' разрешение ' и запустите цикл и переберите каждый элемент заданного списка целых чисел. На каждой итерации извлекать элемент, сохранять его в «num», находить оставшуюся разницу для суммы K и проверять, есть ли разница в заданном списке или нет.


# Программа Python3 для поиска всех пар в
# список целых чисел с заданной суммой


def findPairs (lst, K):

res = []

while lst:

num = lst.pop ()

diff = K - число

если diff in lst:

res.append ((diff, num) )

res.reverse()

return res


# Код драйвера

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

< b> Выход:

[(5, 7) , (3, 9)] 

Способ № 2: Использование collections.Counter

Этот подход основан на том же методе, который обсуждался выше с использованием collections.Counter .


# Программа Python3 для поиска всех пар в
# список целых чисел с заданной суммой

from коллекции import Counter

def findPairs (lst, K):

res = []

количество = Счетчик (lst)


для x in lst:

y = K - x

if (x! = y и count [y]) или (x = = y and count [y ] > 1 ):

res.append ((x, y))

count.subtract ((x, y) )


return res


# Код драйвера

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K ))

Выход:

[ (5, 7), (3, 9)] 

Способ № 3: itertools.combinations (Наивный метод)

Это наивный подход к использованию itertools.combinations . Мы используем цикл for, чтобы просмотреть каждую комбинацию и найти нужную.


< tr>

# Программа Python3 для поиска всех пар в
# список целых чисел с указанная сумма


from itertools импортировать комбинации


def findPairs (lst, K):

res = []

for var in комбинации (lst, 2 ):

если var [ 0 ] + var [ 1 ] = = K:

res.append ((var [ 0 ], var [ 1 ]))


return res


# Код драйвера

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

Выход:

[(5, 7), (3, 9)] 

Способ № 4: itertools.combinations (эффективный метод)


# Программа Python3 для поиска всех пар в
# список целых чисел с заданной суммой

из itertools import комбинации


def findPairs (lst, K):


вернуть [pair для пара в комбинациях (lst, 2 ) if sum (pair) = = K]


# Код драйвера

lst = [ 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

Выход:

[(5, 7), (3, 9)]