Python返回`<itertools.combinations对象在0x10049b470>` - 我该如何访问它?

tsh*_*uck 24 python

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

这是代码.我正在运行2.7.1,一个恩惠分布(pylab) - 在课堂上使用它.

import itertools

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

print itertools.combinations(number, 4)
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 39

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

print list(itertools.combinations(number, 4))
Run Code Online (Sandbox Code Playgroud)

itertools.combinations返回一个迭代器.迭代器是您可以应用的东西for.通常,迭代器的元素会在您获取它时立即计算,因此将所有内容复制到内存中不会受到惩罚,这与a不同list.

  • @好奇您可以使用`itertools.islice`跳转到第10个索引(请查看https://docs.python.org/3/library/itertools.html中的`nth`食谱)。 (3认同)

pho*_*oji 10

试试这个:

for x in itertools.combinations(number, 4):
   print x
Run Code Online (Sandbox Code Playgroud)

或更短:

results = [x for x in itertools.combinations(number, 4) ]
Run Code Online (Sandbox Code Playgroud)

基本上,所有itertools模块函数都返回这种类型的对象.他们的想法是,不是预先计算一个答案列表,而是返回一个可"知道"如何计算答案的可迭代对象,但除非"被问及",否则不会这样做.这样,计算元件没有显着的前期成本.另见这个对发电机的非常好的介绍.