Python返回`<itertools.combinations object at 0x10049b470>` - 我该如何访问?

37 投票
3 回答
65600 浏览
提问于 2025-04-16 12:52

我有一段简单的代码,它会返回标题里的内容。为什么这个数组不直接打印出来呢?这不仅仅是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 那样把所有内容都复制到内存中,这样就不会占用太多内存。

撰写回答