Python返回`<;位于0x10049b470处的itertools.compositions对象>;`-我怎样才能访问这个?

Python返回`<;位于0x10049b470处的itertools.compositions对象>;`-我怎样才能访问这个?,python,Python,我有一段简单的代码,返回标题中的内容。为什么数组不直接打印?这不仅仅是一个itertools问题,我还注意到它在其他代码中只返回对象位置 这是代码。我正在运行2.7.1,一个热情的发行版(pylab)——在课堂上使用它 import itertools number = [53, 64, 68, 71, 77, 82, 85] print itertools.combinations(number, 4) 它不会打印简单列表,因为返回的对象不是列表。如果确实需要列表,请对其应用list功能

我有一段简单的代码,返回标题中的内容。为什么数组不直接打印?这不仅仅是一个
itertools
问题,我还注意到它在其他代码中只返回对象位置

这是代码。我正在运行2.7.1,一个热情的发行版(pylab)——在课堂上使用它

import itertools

number = [53, 64, 68, 71, 77, 82, 85]

print itertools.combinations(number, 4)

它不会打印简单列表,因为返回的对象不是列表。如果确实需要列表,请对其应用
list
功能

print list(itertools.combinations(number, 4))

itertools.combines
返回迭代器。迭代器是可以应用于的东西。通常,迭代器的元素会在您获取它时立即计算,因此与
列表
不同,将所有内容复制到内存不会带来任何损失

试试这个:

for x in itertools.combinations(number, 4):
   print x
或更短:

results = [x for x in itertools.combinations(number, 4) ]

基本上,所有模块函数都返回这种类型的对象。其思想是,它们不是预先计算答案列表,而是返回一个iterable对象,该对象“知道”如何计算答案,但除非“被要求”,否则不会这样做。这样一来,计算元素的前期成本就不会太大。另请参见。

除了建议的解决方案,还有其他方法,只需对代码稍作更改,您就可以执行以下操作:

1)

将组合结果放入变量(res)中,然后使用print,使用单个星号*将序列/集合解压为位置参数。更多细节请参阅

2)

这在python 3中称为“”


关于在中使用星号(*,**)的好教程。

我已将您的问题标记为“家庭作业”,因为您提到了“将其用于类”——请告诉我这是否适用于此特定问题。是否需要使用.next()函数来获取下一个元素?如果不使用for循环,我不想将整个内容复制到memory@Curious是的,请调用
next(c)
其中
c
是组合迭代器。谢谢@kennytm,假设我不能访问第十个索引,除非我调用
next
10次,这是正确的吗?@好奇的是,你可以使用
itertools.islice
跳转到第十个索引(在中检查
nth
配方)。
import itertools

number = [53, 64, 68, 71, 77, 82, 85]

res = itertools.combinations(number, 4)

print(*res)
import itertools

number = [53, 64, 68, 71, 77, 82, 85]

*res, = itertools.combinations(number, 4)

print(res)