Przykłady:
Wejście: lst = [1, 5, 3, 7, 9] K = 12 Wyjście: [(5, 7), (3, 9)] Wejście: lst = [2, 1, 5, 7, -1, 4] K = 6 Wyjście: [(2, 4), (1, 5), (7, -1)]
Metoda nr 1: Pythonic Naive
To naiwne podejście do powyższego problemu. Najpierw bierzemy pustą listę ' res ' i uruchom pętlę i przejdź przez każdy element podanej listy liczb całkowitych. Przy każdej iteracji wyodrębnij element, zapisz go w „num”, znajdź pozostałą różnicę dla sumy K i sprawdź, czy jest różnica w podanej liście, czy nie.
# Python3 program do znajdowania wszystkich par w
# lista liczb całkowitych o podanej ilości
def
findPairs (lst, K):
res
=
[]
while
lst:
num
=
lst.pop ()
diff
=
K
-
numer
if
diff
lst:
res.append ((diff, num) )
res.reverse ()
return
res
# Kod sterownika
lst
=
[
1
,
5
,
3
,
7
,
9
]
K
=
12
print
(findPairs (lst, K))
< b> Wyjście:
[(5, 7) , (3, 9)]
Metoda nr 2: Używanie collections.Counter
To podejście opiera się na tej samej metodzie, która została omówiona powyżej przy użyciu collections.Counter
.
# program Python3 do znajdowania wszystkich par w
# lista liczb całkowitych o podanej ilości
z
kolekcje
import
Licznik
def
findPairs (lst, K):
res
=
[]
liczba
=
Licznik (lst)
for
x
in
lst:
y
=
K
-
x
if
(x!
=
y
i
count [y])
lub
(x
=
=
y
i
liczba [y ] >
1
):
res.append ((x, y))
count.subtract ((x, y) )
return
res
# Kod sterownika
lst
=
[
1
,
5
,
3
,
7
,
9
]
K
=
12
(findPairs (lst, K ))
Wyjście:
[ (5, 7), (3, 9)]
Metoda nr 3: itertools.combinations
(metoda naiwna)
To naiwne podejście do korzystania z itertools.combinations
. Używamy pętli for, aby przejść przez każdą kombinację i znaleźć tę, którą chcemy.
|
Wyjście:
[(5, 7), (3, 9)]
Metoda nr 4: itertools.combinations
(efektywna metoda)
# program Python3 do wyszukiwania wszystkich par w
# lista liczb całkowitych z podaną sumą
z
itertools
import
kombinacje
def
findPairs (lst, K):
return
[pair
for
pair
w
kombinacjach (lst,
2
)
if
sum
(para)
=
=
K]
# Kod sterownika
lst
=
[
1
,
5
,
3
,
7
,
9
]
K
=
12
print
(findPairs (lst, K))
Wyjście:
[(5, 7), (3, 9)]