python循环速度提高_提高python中for循环的速度

我正在计算从1到10^7的数字的分区数。我用五边形数定理来实现,它提供了一种计算n的划分数的方法,我们称之为P(n)=P(n-1)+P(n-2)-P(n-5)-P(n-7)+。。。

所以P(n)依赖于不同的P(n-x),其中x从1到n。总之,长话短说,我使用两个循环,一个从1到10^7,另一个使用x的定义,并根据特定的公式计算。正如您可以想象的,代码执行得相当慢。有什么方法可以提高这些for循环的速度吗?在

另外,我尝试过使用numpy数组,但我对它们并不太满意,不幸的是,它使代码变得更慢。在def build_list(new_limit, k):

list_of_p_minus = list()

while k < new_limit:

list_of_p_minus.append(k*(2*k-1))

list_of_p_minus.append(k*(2*k+1))

k = k+1

return list_of_p_minus

def counter(low, high):

current = low

while current <= high:

yield current

current += 1

def loop_through_numbers(limit, list_of_p_minus):

p_dict = dict()

p_dict[0] = 1

p_dict[1] = 1

aux = 2

aux_index = 1

for number in counter(2, limit+1):

if aux == number:

if aux_index % 4 == 1 or aux_index % 4 == 2:

p_dict[number] = -1

else:

p_dict[number] = 1

aux = aux + (aux_index + 1) * 2

aux_index += 1

else:

p_dict[number] = 0

for element in counter(0, len(list_of_p_minus)):

if element % 4 == 0 or element % 4 == 1:

try:

p_dict[number] += p_dict[number-list_of_p_minus[element]]

except KeyError:

break

else:

try:

p_dict[number] -= p_dict[number-list_of_p_minus[element]]

except KeyError:

break

return

如您所见,我尝试实现迭代器,虽然这使代码运行得更快,但仍然需要大量的时间。在这一点上,任何想法都是非常受欢迎的。。。在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值