Как использовать кортежи для нарезки списка? - PullRequest
1 голос
/ 05 октября 2019

Я сгенерировал список кортежей, используя функцию комбинации в пакете itertools. Как я могу передать это в список целых чисел, чтобы нарезать его? Вот мой пример кода, но выдает ошибку из-за кортежа:

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

Мой ожидаемый вывод - напечатать все комбинации из 3 чисел в myNumbers, например:

12,4,5
4,5,6
5,6,7
...

Ответы [ 3 ]

1 голос
/ 05 октября 2019

Исходя из примера вывода, похоже, что вы хотите напечатать все подряд три элемента списка. Это нечто иное, и нам не нужны комбинации для этого.

Мы можем нарезать список с помощью:

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

или мы можем напечатать элементы сзапятая как разделитель с:

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

Затем печатается:

>>> 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 голос
/ 05 октября 2019
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 голос
/ 05 октября 2019

это работает:

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)

... но, насколько я могу судить, приведенный выше код просто делает это менее эффективным способом:

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

...