需要一种更好的方法来创建数字列表,从而减少运行时间。或者可能想出一种解决我问题的更好方法。
我正在运行一个代码,以基于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)
答案 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