首页 > 解决方案 > 需要减少基于公式和数字 n 创建数字列表的运行时间

问题描述

需要一种更好的方法来创建数字列表,从而减少运行时间。或者可能想出一个更好的方法来解决我的问题。

我正在运行一个代码来创建一系列基于 2 个公式的数字。从 1 开始,公式创建以下数字。这个想法是从最后创建的列表中返回数字 n 。在某些情况下,即使公式很难创建相同的数字,只保留唯一值,并且列表被排序以匹配。我使用 while 循环来创建列表,我相信减少重复次数可以帮助解决我的问题,但我想不出一种方法来有效地减少它,而不会破坏我的代码的目的。

def dbl_linear(n):
    x = 1
    y = 0
    z = 0
    i = 0
    u = []
    u.append(x)
    while i <= n:
        x = (u)[i]
        y = 2 * x + 1
        u.append(y)
        z = 3 * x + 1
        u.append(z)
        i = i + 1
        u.sort()
    uFix = set(u)
    uFix = list(uFix)
    uFix.sort()
    return uFix[n]
print(dbl_linear(50))

这些是预期的结果。我得到了,但它需要太长时间。

dbl_linear(10), 22)
dbl_linear(20), 57)
dbl_linear(30), 91)
dbl_linear(50), 175)

标签: pythonpython-3.x

解决方案


您的功能可以大大简化为:

代码:

def dbl_linear(n):
    u = [1]
    for i in range(n):
        x = u[i]
        u.extend((2 * x + 1, 3 * x + 1))
    return sorted(set(u))[n]

测试代码:

assert dbl_linear(10) == 22
assert dbl_linear(20) == 57
assert dbl_linear(30) == 91
assert dbl_linear(50) == 175

推荐阅读