【问题标题】:Itertools Combinations Error / Memory problemItertools 组合错误/内存问题
【发布时间】:2019-03-15 21:42:12
【问题描述】:

我是一名金融专业的研究生,刚接触 Python。我必须为一个学校项目创建一个包含 500 只股票的可能组合列表。 (在 nCr 方面,我需要 500C2、500C3、...、500C498、500C499、500C500)

我有以下代码:

    tickers = list of the 500 stocks I'm using

    import itertools

    w = len(tickers) + 1 
    i = 2
    test_list = []

    while i < w:
        combinations = list(itertools.combinations(tickers,i))
        test_list.append(combinations)

    i = i + 1

print(test_list)

但是,运行代码时出现以下错误。任何帮助是极大的赞赏。

已超出 IOPub 数据速率。 笔记本服务器将暂时停止发送输出 给客户端,以避免崩溃。 要更改此限制,请设置配置变量 --NotebookApp.iopub_data_rate_limit。 当前值: NotebookApp.iopub_data_rate_limit=1000000.0(字节/秒) NotebookApp.rate_limit_window=3.0(秒)

【问题讨论】:

  • test_list 拥有一大堆值,而您正试图将所有这些值都转储到笔记本中。这很可能会导致它崩溃,因此服务器已采取措施防止这种情况发生。值在那里,因此您可以很好地打印前几个条目。

标签: python-3.x memory combinations itertools


【解决方案1】:

有500个! /(250!* 250)!= 116744315788277682920934734762176619659230081180311446124100284957811112673608473715666417775521605376810865902709989580160037468226393900042796872256 =〜1.1674431578827768e + 250出来的500只股票149个组合,更不用说500C251,500C252等,自然你的电脑内存是无法适应这种大了一些项目当您尝试将它们全部附加到test_list时。

因此,无论您尝试对组合进行何种计算和/或 I/O 操作,都应直接在循环内进行,不要将组合存储在列表中。但是话又说回来,这是如此多的组合,即使循环什么也没做,你也可能很难在一生中完成循环。您应该重新考虑解决您要解决的问题的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多