我有这段简单的代码返回标题中的内容.为什么数组不打印?这不仅仅是一个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.
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模块函数都返回这种类型的对象.他们的想法是,不是预先计算一个答案列表,而是返回一个可"知道"如何计算答案的可迭代对象,但除非"被问及",否则不会这样做.这样,计算元件没有显着的前期成本.另见这个对发电机的非常好的介绍.