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