Python 试图在列表中查找唯一值的速度较慢的脚本
我在Python中遇到了一个问题: 如果:Python 试图在列表中查找唯一值的速度较慢的脚本,python,Python,我在Python中遇到了一个问题: 如果: 2≤ A.≤ 100和2≤ B≤ 100 我写了以下脚本,但在我的笔记本电脑上速度太慢(甚至不能产生结果): 好吗?为什么速度慢?脚本速度慢且不返回值的原因是您创建了一个无限循环。您需要将a+=1行删除一级,否则,在第一次通过内部之后,循环a将不会再次递增 注释中指出了脚本的一些其他问题,但这正是您遇到的问题的原因。此代码不起作用;这是一个无限循环,因为在循环的每次迭代中,你都不会增加a。在修复该问题后,您仍然无法得到正确答案,因为当b达到101时,您
2≤ A.≤ 100和2≤ B≤ 100
我写了以下脚本,但在我的笔记本电脑上速度太慢(甚至不能产生结果):
好吗?为什么速度慢?脚本速度慢且不返回值的原因是您创建了一个无限循环。您需要将a+=1
行删除一级,否则,在第一次通过内部之后,
循环a
将不会再次递增
注释中指出了脚本的一些其他问题,但这正是您遇到的问题的原因。此代码不起作用;这是一个无限循环,因为在循环的每次迭代中,你都不会增加a
。在修复该问题后,您仍然无法得到正确答案,因为当b
达到101
时,您从未将a
重置为2
然后,List
将只包含4
,因为您在循环外部将c
设置为2**2
,并且从不在循环内部更改它。当你修正它时,它仍然会比实际需要的慢,因为你每次都在阅读整个列表来获得计数,随着它变长,这需要越来越多的时间
如果您只需要知道某个项目是否在列表中,通常应该在
中使用,而不是计数
,因为它会在找到该项目后立即停止,但在这个特定的实例中,您无论如何都应该使用集合
,因为您正在寻找唯一的值。您只需将
添加到集合中,而无需检查项目是否已在集合中
最后,使用for
循环比使用while
循环更具可读性
result = set()
for a in xrange(2, 101):
for b in xrange(2, 101):
result.add(a ** b)
print len(result)
这在我的机器上不到一秒钟。您的代码不好,因为它不能产生正确的结果。正如@grael的评论所指出的那样,在循环中不需要重新计算
c
的值,因此只需要反复计算一个值。正如其他人所指出的,还有其他问题
您的代码速度不快有几个原因
a
和b
,使用:
for a in range(2,101):
for b in range(2,101):
c = pow(a, b)
# other code here
if List.count(c)==0
必须检查之前的每个数字,以查看是否已看到当前数字。当您已经看到数千个数字时,这将变得非常缓慢。将已经看到的数字保存在一个集合中比保存在列表中要快得多。检查一个数字是否在集合中要比在列表中使用count()
快得多尝试结合所有这些建议。正如另一个答案所示,仅使用最后两个可能就足够了。您做了什么来调试它?您忘记了在循环的每个步骤中重新计算
c
的值。它的速度很慢,因为您需要进行大约100000次迭代,其中需要重新计算c
,检查它是否存在于列表中,并在需要时将其添加到其中。这是一个很大的操作。然而,目前还没有更简单的解决办法。
for a in range(2,101):
for b in range(2,101):
c = pow(a, b)
# other code here