Python 为什么不是';t len是否返回正确的值?
我希望这段代码返回列表u中的n个元素。但这并没有发生。有人能帮忙吗?我给了输入n=20。len(u)是15或7。每次运行时都会有不同的答案修改你正在迭代的对象基本上是未定义的行为,你不能假设迭代是否会考虑到新项目,特别是在调整大小时(Python 为什么不是';t len是否返回正确的值?,python,python-3.x,Python,Python 3.x,我希望这段代码返回列表u中的n个元素。但这并没有发生。有人能帮忙吗?我给了输入n=20。len(u)是15或7。每次运行时都会有不同的答案修改你正在迭代的对象基本上是未定义的行为,你不能假设迭代是否会考虑到新项目,特别是在调整大小时(列表是O(1)摊销追加,因为它是O(1)在保留的空间上,但他们经常需要重新分配整个东西,以便为新元素留出更多空间)。这里更不用说,您只是在第一次迭代期间修改初始列表,之后您将更新一个不同的不相关列表 甚至没有理由对u中的a使用,只需使用一个无限循环(可能还记得最后一
列表
是O(1)摊销追加,因为它是O(1)在保留的空间上,但他们经常需要重新分配整个东西,以便为新元素留出更多空间)。这里更不用说,您只是在第一次迭代期间修改初始列表,之后您将更新一个不同的不相关列表
甚至没有理由对u中的a使用
,只需使用一个无限循环(可能还记得最后一个元素,因为通过set
进行的uniquification将扰乱列表,或者在插入之前检查元素是否已经存在,中的是O(n),但set(a)和list(a)也是如此).您能附上一个输入和输出示例吗?您在哪里调用这个?n是什么?你想做什么?添加列表、转换为集合、转换为列表。。所有这些都使用相同的变量名。什么?输入?输出?不要修改您正在迭代的对象,因为您可以看到我希望为列表中的每个元素a添加2*a+1和3*a+1。我如何在没有循环的情况下获取元素以及摊销的内容,先生?“修改您正在迭代的对象基本上是未定义的行为”不是严格的。@ Juanga.Auvialaa在词的C++意义上是不正确的,但它在单词的字面意义上是真实的,行为是不明确的,它不应该造成内存不安全。迭代列表时不修改列表是定义良好的。对于大多数内置容器,它也会抛出一个错误。
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)