Programma Python per trovare tutte le possibili coppie con una data somma

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

Esempi:

Input:  lst = [1, 5, 3, 7, 9] K = 12 Output:  [(5, 7), (3, 9)] Input:  lst = [2, 1, 5, 7, -1, 4] K = 6 Output:  [(2, 4), (1, 5), (7, -1)] 

Metodo n. 1: Pythonic ingenuo

Questo è un approccio ingenuo al problema di cui sopra. Per prima cosa, prendiamo una lista vuota ' ris ' e avviare il ciclo e scorrere ogni elemento dell`elenco di numeri interi fornito. Ad ogni iterazione, estrai l`elemento, memorizzalo in "num", trova la differenza rimanente per la somma K e controlla se c`è una differenza nella lista data o meno.


# Programma Python3 per trovare tutte le coppie in
# elenco di numeri interi con una determinata quantità


def findPairs (lst, K):

res = []

while lst:

num = lst.pop()

diff = K - num

if diff in lst:

res.append ((diff, num) )

res.reverse()

return res


# Codice del driver

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

K = 12

print (findPairs (lst, K))

< b> Esci:

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

Metodo n. 2: utilizzando collections.Counter

Questo approccio segue lo stesso metodo discusso sopra usando collections.Counter .


# Programma Python3 per trovare tutte le coppie in
# elenco di numeri interi con una determinata quantità

from collezioni import Counter

def findPairs (lst, K):

res = []

count = Contatore (lst)


for x in lst:

y = K - x

if (x! = y e conteggio [y]) o (x = = y e count [y ] > 1 ):

res.append ((x, y))

count.subtract ((x, y) )


return res


# Codice del driver

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

K = 12

print (findPairs (lst, K ))

Esci:

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

Metodo n. 3: itertools.combinations (Metodo ingenuo)

Questo è un approccio ingenuo all`utilizzo di itertools.combinations . Usiamo un ciclo for per esaminare ogni combinazione e trovare quella che vogliamo.


< tr>

# Programma Python3 per trovare tutte le coppie in
# elenco di interi con un dato importo


from itertools import combinazioni


def trovaPairs (lst, K):

res = []

for var in combinazioni (lst, 2 ):

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

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


return res


# Codice driver

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

K = 12

print (findPairs (lst, K))

Esci:

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

Metodo n. 4: itertools.combinations (metodo efficace)


# Programma Python3 per trovare tutte le coppie in
# elenco di interi con una data somma

from itertools import combinazioni


def findPairs (lst, K):


ritorno [coppia for coppia in combinazioni (lst, 2 ) if sum (coppia) = = K]


# Codice driver

lst = [ < classe codice = "valore"> 1 , 5 , 3 , 7 , 9 ]

K = 12

print (findPairs (lst, K))

Esci:

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