He generado una lista de tuplas usando la función de combinación en el paquete itertools. ¿Cómo puedo pasar eso a una lista de enteros para cortarlo? Aquí está mi código de muestra, pero me da un error debido a la tupla:

from itertools import combinations
myNumbers = [12,4,5,6,7,9,3,2]
listOfIndexes = list(range(8))
comb = combinations(listOfIndexes, 3)
for i in list(comb):
    print(myNumbers[int(i)])

Mi salida esperada es imprimir todas las combinaciones de 3 números en myNumbers, como:

12,4,5
4,5,6
5,6,7
...
1
Mohammad 5 oct. 2019 a las 01:11

3 respuestas

La mejor respuesta

Esto funciona:

from itertools import combinations
myNumbers = [12,4,5,6,7,9,3,2]
listOfIndexes = list(range(8))
comb = combinations(listOfIndexes, 3)
for i in list(comb):
  a,b,c = myNumbers[i[0]], myNumbers[i[1]], myNumbers[i[2]]
  print(a,b,c)

... pero por lo que puedo decir, el código anterior solo hace esto de una manera menos eficiente:

print([i for i in combinations(myNumbers, 3)])

1
JacobIRR 4 oct. 2019 a las 22:22

Según el resultado de la muestra, parece que su objetivo es imprimir los tres elementos consecutivos de la lista. Esto es algo diferente, y no necesitamos combinaciones para eso.

Podemos cortar la lista con:

myNumbers = [12,4,5,6,7,9,3,2]
for i in range(len(myNumbers)-2):
    print(myNumbers[i:i+3])

O podemos imprimir los elementos con una coma como separador con:

myNumbers = [12,4,5,6,7,9,3,2]
for i in range(len(myNumbers)-2):
    print(*myNumbers[i:i+3], sep=',')

Esto luego imprime:

>>> for i in range(len(myNumbers)-2):
...     print(*myNumbers[i:i+3], sep=',')
... 
12,4,5
4,5,6
5,6,7
6,7,9
7,9,3
9,3,2
1
Willem Van Onsem 4 oct. 2019 a las 22:27
from itertools import combinations
myNumbers = [12,4,5,6,7,9,3,2]
listOfIndexes = list(range(8))
comb = combinations(listOfIndexes, 3)
for i in list(comb):    
    print(*[myNumbers[ij] for ij in i],sep=',')
1
sahasrara62 4 oct. 2019 a las 22:46
58243671