Programme Python pour trouver toutes les paires possibles avec une somme donnée

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

Exemples :

Entrée :  lst = [1, 5, 3, 7, 9] K = 12 Sortie :  [(5, 7), (3, 9)] Entrée :  lst = [2, 1, 5, 7, -1, 4] K = 6 Sortie :  [(2, 4), (1, 5), (7, -1)] 

Méthode n° 1 : Pythonic Naive

Il s`agit d`une approche naïve du problème ci-dessus. Tout d`abord, nous prenons une liste vide ' res ' et démarrez la boucle et parcourez chaque élément de la liste d`entiers donnée. A chaque itération, extrayez l`élément, stockez-le dans "num", trouvez la différence restante pour la somme K et vérifiez s`il y a une différence dans la liste donnée ou non.


# programme Python3 pour trouver toutes les paires dans
# liste d`entiers avec un montant donné


def findPairs (lst, K) :

res = []

tandis que lst :

num = lst.pop ()

diff = K - num

si diff dans lst :

res.append ((diff, num) )

res.reverse ()

return res


# Code du pilote

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

K = 12

print (findPairs (lst, K))

< b> Quitter :

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

Méthode n° 2 : Utiliser collections.Counter

Cette approche suit la même méthode que celle décrite ci-dessus en utilisant collections.Counter.


# programme Python3 pour trouver toutes les paires dans
# liste d`entiers avec un montant donné

de collections import Compteur

def findPairs (lst, K) :

res = []

count = Compteur (lst)


pour x dans lst :

y = K - x

si (x ! = y et count [y]) ou (x = = y et compter [y ] > 1 ) :

res.append ((x, y))

count.subtract ((x, y) )


return res


# Code du pilote

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

K = 12

print (findPairs (lst, K ))

Quitter :

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

Méthode n° 3 : itertools.combinations (méthode naïve)

C`est une approche naïve de l`utilisation de itertools.combinations . Nous utilisons une boucle for pour parcourir chaque combinaison et trouver celle que nous voulons.


< tr>

# programme Python3 pour trouver toutes les paires dans
# liste d`entiers avec un montant donné


de itertools import combinaisons


def findPairs (lst, K) :

res = []

pour var dans combinaisons (lst, 2 ) :

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

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


return res


# Code du pilote

lst = [ 1 , 5 , 3 , 3 = "simple"> , 7 , 9 ]

K = 12

print (findPairs (lst, K))

Quitter :

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

Méthode n° 4 : itertools.combinations (méthode efficace)


# Programme Python3 pour trouver toutes les paires dans
# liste d`entiers avec une somme donnée

de itertools importer combinaisons


def findPairs (lst, K) :


retour [paire pour paire dans combinaisons (lst, 2 ) if sum (pair) = = K]


# Code du conducteur

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

K = 12

imprimer (findPairs (lst, K))

Quitter :

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