需要减少基于公式和数字n

时间:2019-01-04 05:27:39

标签: python python-3.x

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

我正在运行一个代码,以基于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)

1 个答案:

答案 0 :(得分:1)

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

代码:

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