Примеры:
Ввод: 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
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
(findPairs (lst, K ))
Выход:
[ (5, 7), (3, 9)]
Способ № 3: itertools.combinations
(Наивный метод)
Это наивный подход к использованию itertools.combinations
. Мы используем цикл for, чтобы просмотреть каждую комбинацию и найти нужную.
|
Выход:
[(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)]