python双重for循环太慢_python-为什么单循环函数比双循环慢?

此问题是由另一个堆栈溢出问题-How do I improve remove duplicate algorithm?引起的

问题中张贴的要求是-

need to return the length of an array that removed duplicates but we can leave at most 2 duplicates.

示例-[1,1,1,2,2,3],新数组将是[1,1,2,2,3].因此,新长度为5.

OP给出的解决方案-

def removeDuplicates(nums):

if nums is None:

return 0

if len(nums) == 0:

return 0

if len(nums) == 1:

return 1

new_array = {}

for num in nums:

new_array[num] = new_array.get(num, 0) + 1

new_length = 0

for key in new_array:

if new_array[key] > 2:

new_length = new_length + 2

else:

new_length = new_length + new_array[key]

return new_length

我尝试提出一种将循环数量减少到单个循环的解决方案.

def removeDuplicates1(nums):

if nums is None:

return 0

if len(nums) == 0:

return 0

if len(nums) == 1:

return 1

new_array = {}

length = 0

for num in nums:

n = new_array.get(num, 0)

new_array[num] = n + 1

if n <= 1:

length += 1

return length

之后,我尝试对解决方案与原始解决方案进行计时,我认为我的解决方案应该对原始解决方案进行了至少一点改进,但??是timeit的结果表明原始解决方案总是更好(即使数组包含所有独特元素).采取的时间-

In [3]: l = list(range(1000))

In [4]: %timeit removeDuplicates(l)

1000 loops, best of 3: 390 s per loop

In [5]: %timeit removeDuplicates1(l)

1000 loops, best of 3: 412 s per loop

In [6]: l1 = [1] * 1000

In [7]: %timeit removeDuplicates(l1)

1000 loops, best of 3: 224 s per loop

In [9]: %timeit removeDuplicates1(l1)

1000 loops, best of 3: 304 s per loop

有人可以建议为什么会这样吗?我是否忽略了明显的东西?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值