首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >itertools.combinations()的输出

itertools.combinations()的输出
EN

Stack Overflow用户
提问于 2013-04-19 16:01:44
回答 2查看 6.4K关注 0票数 4

我是一个用python编程的新手(好吧,一般是编程),所以我真的希望有人能帮助我使用内置的itertools.combinations函数。

我正在尝试从52张牌的列表中创建一个所有可能的组合7牌组合的列表,即52张C7。

所以我的代码看起来像这样

代码语言:javascript
运行
复制
>>> import itertools
>>> deck = [1,2,3,4,5...,52]
>>> list_1 = list(itertools.combinations(deck,2))
>>> list_1[5]
(1, 7)

到目前为止,直到我尝试了7种组合

代码语言:javascript
运行
复制
>>> all_possible_hands = list(itertools.combinations(deck,7))
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    all_possible_hands = list(itertools.combinations(deck,7))
MemoryError

这个列表可以为较小的数据集(52C2)创建,但是当这个数字变大时,我会得到一个MemoryError,可能是内存不足。我在googled上搜索了combinations()函数是如何工作的,显然它输出了一个对象,并将其转换为一个列表。

当我不使用list()时,控制台返回一个内存地址(我相信)。

代码语言:javascript
运行
复制
>>> all_possible_hands = itertools.combinations(deck,7)
>>> all_possible_hands
<itertools.combinations object at 0x02E63180>

我的问题是:内存地址是否包含我想要的数据,并且可以以某种方式将其转换为列表或其他东西,以便我可以访问列表中的各个元素?

谢谢。任何有见地的人都会非常感激。

EN

回答 2

Stack Overflow用户

发布于 2013-04-19 16:08:00

在包含52张牌的扑克牌中有133784560张七张牌的组合,而您正在尝试创建一个包含133784560个元素的列表。Python没有足够的内存来做这件事,所以它崩溃了。

itertools.combinations返回一个迭代器。这就像一个列表,只是它一次只给你一个元素,按需,而不是一次创建所有元素。这节省了内存。你是否能从迭代器中得到你想要的东西取决于你想要做什么。如果你只是想,比如说,打印每一个,你可以很容易地做到:

代码语言:javascript
运行
复制
for item in itertools.combinations(deck, 7):
     print item

你不能轻易做到的是得到一个特定的物品。没有直接等同于使用list_l[5]来获取第五个元素。您必须遍历迭代器5次,或者使用itertools中的其他工具(如islice)。

票数 5
EN

Stack Overflow用户

发布于 2013-04-19 16:07:00

此对象是一个,由generator函数itertools.combinations返回。您可以通过迭代此对象来访问每个组合:

代码语言:javascript
运行
复制
for hand in all_possible_hands:
     print hand

迭代器有助于避免一次将所有数据保存在内存中,但缺点是每个项目只能访问一次。当你完成对对象的迭代后,它就会耗尽,你不能从它得到任何其他东西。此外,与通常的列表不同,如果不迭代到末尾,就不能访问最后一项。

您也可以编写生成器函数。在itertools docs中有一些例子。生成器函数应该有一个或多个yield statements,而不是return statements

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16100017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档