Programa Python para encontrar todos os pares possíveis com uma determinada soma

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

Exemplos:

Entrada:  lst = [1, 5, 3, 7, 9] K = 12 Saída:  [(5, 7), (3, 9)] Entrada:  lst = [2, 1, 5, 7, -1, 4] K = 6 Saída:  [(2, 4), (1, 5), (7, -1)] 

Método nº 1: Pythonic Naive

Esta é uma abordagem ingênua para o problema acima. Primeiro, pegamos uma lista vazia ' res ' e iniciar o loop e percorrer cada elemento da lista de inteiros fornecida. A cada iteração, extraia o elemento, armazene-o em "num", encontre a diferença restante para a soma K e verifique se há diferença na lista fornecida ou não.


# Programa Python3 para encontrar todos os pares em
# lista de inteiros com uma determinada quantidade


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


# Código do driver

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

K = 12

print (findPairs (lst, K))

< b> Sair:

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

Método nº 2: Usando collections.Counter

Esta abordagem segue o mesmo método discutido acima usando collections.Counter .


# Programa Python3 para encontrar todos os pares em
# lista de inteiros com uma determinada quantidade

de coleções import Counter

def findPairs (lst, K):

res = []

contagem = Contador (lst)


para x em lst:

y = K - x

if (x! = y e contagem [y]) ou (x = = y e contagem [y ] > 1 ):

res.append ((x, y))

count.subtract ((x, y) )


return res


# Código do driver

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

K = 12

print (findPairs (lst, K ))

Sair:

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

Método nº 3: itertools.combinations (Método Naive)

Esta é uma abordagem ingênua para usar itertools.combinations . Usamos um loop for para percorrer cada combinação e encontrar a que queremos.


< tr>

# Programa Python3 para encontrar todos os pares em
# lista de inteiros com um determinado valor


de itertools import combinações


def findPairs (lst, K):

res = []

para var em combinações (lst, 2 ):

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

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


return res


# Código do driver

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

K = 12

print (findPairs (lst, K))

Sair:

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

Método nº 4: itertools.combinations (método efetivo)


# Programa Python3 para encontrar todos os pares em
# lista de inteiros com uma determinada soma

de itertools import combinações


def findPairs (lst, K):


return [par para par em combinações (lst, 2 ) if soma (par) = = K]


# Código do driver

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

K = 12

print (findPairs (lst, K))

Sair:

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