TypeError:'itertools.combinations'对象不可订阅

时间:2015-01-28 18:22:16

标签: python itertools

当我尝试跑步时:

temp = (twoset2[x][i][0]-twoset[x][i][1])

我明白了:

  

TypeError:' itertools.combinations'对象不可订阅

我的代码:

for x in range(0,64):
    for i in range(0,1):
        temp = (twoset2[x][i][0]-twoset[x][i][1])
        DSET[counter2]= temp
        temp = 0
        counter2 += 1

基本上我要做的是:我有一个2个元素坐标子集的列表(twoset2)(例如:((2,0) (3,3))。我想访问每个单独的坐标,然后取xy之间的差异并将其放入DSET,但我在尝试运行时遇到上述错误。

请帮忙!

2 个答案:

答案 0 :(得分:4)

itertools.combinations返回生成器而不是列表。这意味着您可以迭代它但不能按照您尝试的方式逐个元素地访问它。

相反,你可以像这样得到每个组合:

import itertools
for combination in itertools.combinations([1,2,3], 2):
    print combination

这给出了:

(1, 2)
(1, 3)
(2, 3)

答案 1 :(得分:2)

twoset2不是列表;它是一个itertools.combinations对象(不支持索引):

>>> import itertools
>>> itertools.combinations([1, 2, 3], 2)
<itertools.combinations object at 0x01ACDC30>
>>>
>>> twoset2 = itertools.combinations([1, 2, 3], 2)
>>> twoset2[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'itertools.combinations' object is not subscriptable
>>>

如果需要列表,则需要将其显式转换为列表:

twoset2 = list(itertools.combinations(...))