Program w Pythonie do znajdowania wszystkich możliwych par z podaną sumą

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

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 in 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

print (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.


< tr>

# Program Python3 do wyszukiwania wszystkich par w
# lista liczb całkowitych z podana kwota


z itertools import kombinacjach


def findPairs (lst, K):

res = []

for var w kombinacje (lst, 2 ):

if var [ 0 ] + var [ 1 ] = = K:

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


return res


# Kod sterownika

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

K = 12

print (findPairs (lst, K))

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)]