python - 需要减少基于公式和数字 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)
解决方案
您的功能可以大大简化为:
代码:
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
推荐阅读
- python - 在 EC2 中安装 chrome 浏览器无头 Selenium Python
- spring-boot - Thymeleaf:解析多个消息代码中最具体的
- c - 修改函数中结构成员指向的值
- react-native - react-navigation 如何将动态测试 id 添加到 tabBarTestID
- c# - 枪开机自动开火?
- php - 将数组转换为十进制
- postgresql - 仅计算和显示特定列中只有 1 个结果的行
- amazon-web-services - 在同一个 lambda 函数中从不同帐户访问两个表
- python-2.7 - 命令“python setup.py egg_info”在 PATH/psycopg2 中失败,错误代码为 1
- c# - 如何使用值数组读取 appsettings.json