Python返回`<itertools.combinations object at 0x10049b470>` - 我该如何访问?
我有一段简单的代码,它会返回标题里的内容。为什么这个数组不直接打印出来呢?这不仅仅是itertools
的问题,我还发现其他代码也会这样,只返回对象的位置。
这是我的代码。我在运行2.7.1版本的Enthought发行版(pylab),是为了上课用的。
import itertools
number = [53, 64, 68, 71, 77, 82, 85]
print itertools.combinations(number, 4)
3 个回答
3
除了已经提到的解决方案,还有其他方法,只需对你的代码做一点修改,你可以这样做:
1)
import itertools
number = [53, 64, 68, 71, 77, 82, 85]
res = itertools.combinations(number, 4)
print(*res)
把组合的结果放到一个变量里(叫做res),然后用print函数时,使用一个星号(*)来把这个序列或集合拆开,变成位置参数。想了解更多细节,可以查看这里。
2)
import itertools
number = [53, 64, 68, 71, 77, 82, 85]
*res, = itertools.combinations(number, 4)
print(res)
在Python 3中,这个叫做“扩展可迭代对象拆包”。
关于如何使用星号(*,**)的好教程可以在这里找到。
11
试试这个:
for x in itertools.combinations(number, 4):
print x
或者更简短的:
results = [x for x in itertools.combinations(number, 4) ]
基本上,所有的 itertools 模块的函数都会返回这种类型的对象。它的意思是,跟直接计算出一个答案列表不同,这些函数返回的是一个可迭代的对象,这个对象“知道”怎么计算答案,但只有在“被要求”的时候才会去计算。这样一来,计算元素时就不会有太大的前期成本。你也可以看看 这个关于生成器的很好的介绍。
51
它不打印一个简单的列表,因为返回的对象不是一个列表。如果你真的需要一个列表,可以对它使用 list
函数。
print list(itertools.combinations(number, 4))
itertools.combinations
返回的是一个迭代器。迭代器是一种可以用 for
循环来使用的东西。通常,当你获取迭代器中的元素时,这些元素会立即被计算出来,所以不会像 list
那样把所有内容都复制到内存中,这样就不会占用太多内存。