gpt4 book ai didi

python - 我怎样才能重写这个 Python 操作,以免它挂起我的系统?

转载 作者:行者123 更新时间:2023-11-28 21:15:37 25 4
gpt4 key购买 nike

初学者在这里,寻找答案,但找不到。

我知道(或者更确切地说怀疑)以下代码的部分问题是组合列表有多大。

(也许,最后一行似乎也是一个错误,因为如果我只运行“print ...”而不是“comb += ...”,它会快速运行并退出。“追加”会更多优雅?)

我不能 100% 确定系统挂起是由于磁盘 I/O(交换?)、CPU 使用或内存...在 Windows 下运行它似乎会导致相当大的磁盘 I/O “系统”,而在 Linux 下,top 在被杀死之前显示出高 CPU 和内存使用率。不过,在这两种情况下,系统的其余部分在执行此操作时都无法使用(直接在 Python 解释器以及 PyCharm 中尝试过)。

所以问题分为两部分:1) 是否有一些“安全”的方法来测试这样的代码,不会对系统的其余部分产生负面影响,以及 2) 对于这个特定示例,我应该如何重写它?

试试这个代码(我不推荐!):

from itertools import combinations_with_replacement as cwr
comb = []
iterable = [1,2,3,4]
for x in xrange(4,100):
comb += cwr(iterable, x)

谢谢!

编辑:应该指定,但这里也是 python2.7 代码(猜测 xrange 很明显它不是 3)。挂起的 Windows 机器有 4 GB 的 RAM,但看起来挂起是在磁盘 I/O 上。我正在(现在仍在)处理的最初问题是 codewars.com 上的一个问题,关于在给定可能的硬币列表和要制作的金额的情况下有多少种方法可以进行更改。我想出的解决方案适用于少量,而不适用于大量。显然,我需要想出一个更好的算法来解决这个问题……所以这当然是非必要的代码。但是,我想知道我是否可以做些什么来设置编程环境,以便我的代码中的错误不会以这种方式传播和阻塞我的系统。

进一步编辑:今晚我再次处理这个问题,并意识到我不需要附加到主列表(正如你们中的一些人在评论中向我暗示的那样),而只需处理收集到的子集。我并没有真正给出足够的代码来使这一点显而易见,但我这里的关键问题是这一行:

comb += cwr(iterable, x)

应该是

comb = cwr(iterable, x)

最佳答案

由于您正在尝试通过替换计算组合,因此必须考虑的排序数将是4^n 次方。(4 因为您的迭代有 4 个项目)。

更一般地说,要计算的排序数是可以位于列表中任何位置的元素数,乘以列表长度的幂。

您正在尝试计算 3 到 99 之间的 n 的 4^n 次方。4^99 次方是 4.01734511064748 * 1059

恐怕即使是量子计算机也无法帮助计算它。

关于python - 我怎样才能重写这个 Python 操作,以免它挂起我的系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com