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