gpt4 book ai didi

python - 缓慢的脚本尝试在列表中查找唯一值

转载 作者:行者123 更新时间:2023-11-30 22:50:06 24 4
gpt4 key购买 nike

我在 Python 中遇到了一个问题:我想找出存在多少个唯一的 a**b 值,如果:
2 ≤ a ≤ 100并且2 ≤ b ≤ 100

我编写了以下脚本,但在我的笔记本电脑上速度太慢(甚至不产生结果):

List=[]
a = 2
b = 2
c = pow(a, b)
while b != 101:
while a != 101:
if List.count(c) == 0:
List.append(c)
a += 1
b += 1
print len(List)

好用吗?为什么这么慢?

最佳答案

此代码不起作用;这是一个无限循环,因为您不会在循环的每次迭代中递增 a 。修复此问题后,您仍然无法得到正确的答案,因为当 b 达到 101 时,您从未将 a 重置为 2。

然后,List 将仅包含 4,因为您将循环外部的 c 设置为 2 ** 2 > 并且永远不要在循环内更改它。当你修复这个时,它仍然会比实际需要的速度慢,因为你每次都要读取整个列表来获取计数,并且随着它变得越来越长,这需要越来越多的时间时间。

如果您只需要知道某个项目是否在列表中,通常应该使用 in 而不是 count,因为一旦找到该项目,它就会停止item,但在这个特定实例中,无论如何您都应该使用 set,因为您正在寻找唯一值。您只需添加到集合中,无需检查该项目是否已在集合中。

最后,使用 for 循环比使用 while 循环更具可读性。

result = set()
for a in xrange(2, 101):
for b in xrange(2, 101):
result.add(a ** b)
print len(result)

这在我的机器上只需要不到一秒钟的时间。

关于python - 缓慢的脚本尝试在列表中查找唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517737/

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