如何使用元组对列表进行切片?

问题描述 投票:1回答:3

我已经使用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)])

我的预期输出是打印myNumbers中3个数字的所有组合,例如:

12,4,5
4,5,6
5,6,7
...
python itertools
3个回答
1
投票

这有效:

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


1
投票

基于示例输出,看起来您打算打印列表的所有连续三个元素。这是不同的,我们确实需要[[not组合。

我们可以使用以下方法对列表进行切片:

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


0
投票
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=',')
© www.soinside.com 2019 - 2024. All rights reserved.