python - 为什么 len 不返回正确的值?
问题描述
def dbl_linear(n):
u=[1]
i=0
for a in u:
u.append((2*a+1))
u.append((3*a+1))
u=set(u)
u=list(u)
if len(u)>=n:
print(len(u))
break
return len(u)
我希望这段代码返回列表 u 中的 n 个元素。但这并没有发生。有人可以帮忙吗?我输入 n=20。len(u) 以 15 或 7 的形式出现。每次运行都有不同的答案
解决方案
修改您正在迭代的对象基本上是未定义的行为,您不能假设迭代是否会考虑新项目,特别是在调整大小时(list
是 O(1)摊销附加,因为它是 O (1)在保留空间上,但他们经常需要重新分配整个事物以为新元素腾出更多空间)。更不用说这里您只是在第一次迭代期间修改初始列表,之后您将更新另一个不相关的列表。
甚至没有理由使用for a in u
,只需使用无限循环(并且可能记住最后一个元素,因为您的唯一性 viaset
会打乱列表,或者在插入之前检查元素是否已经存在,in
是 O(n) 但 set( a) 和列表(a))。
推荐阅读
- python - Python QTableWidget不显示全宽
- mongodb - 由于内核不支持 IPv6,无法绑定到 IPv6 地址
- cuda - CUDA 会自动将 float4 数组转换为数组结构吗?
- c# - ASP.NET Core 声明是否可靠且安全,不会被篡改?
- dart - 颤振绘制圆弧布局
- r - 无法在 rgl plot3D 中自定义点
- amazon-web-services - AWS S3 删除尚未访问的文件
- javascript - 调用 Firebase Cloud Functions 时出现 CORS 错误
- r - Shiny/R 中的反应轴标签
- javascript - 仅使用 JavaScript,我如何查询谷歌表格并将单个单元格的值分配为 JavaScript 变量?