使用while循环
l = [6, 7, 8, 9];
i = 0;
while i < len(l.copy()):
l.pop();
i += 1;
print(l);
预期 [] 但实际 [6,7]
使用for循环
l = [6, 7, 8, 9];
for i in range(len(l.copy())): # or using just l.copy the same result
l.pop();
print(l);
预期结果 []
那么两者之间有什么区别。 为什么while循环l.copy改变了,但是它却不在for循环中?
我的另一个问题是,当我们遇到这样的事情时:
l = [6, 7, 8, 9];
for i in l:
l.pop();
print (l);
我们得到 [6,7] 因此,如果我想拥有一个空列表,一种解决它的方法是像上面的示例一样使用copy,但是效率不高。另一种方法是通过创建一个保存列表长度的变量,然后在我们的条件内使用它。有更好的方法吗? ,那么我不是在谈论这个特定的例子,我想知道的是为什么条件内的值会发生变化?这是在所有语言中发生还是仅在诸如python或js这样的现代语言中发生?
答案 0 :(得分:1)
区别不在于l.copy()
,而是在于如何使用该值:
while i < len(l.copy()):
vs
for i in range(len(l.copy())):
range
生成一个对象,该对象存储在整个循环中,它仅使用l.copy()
一次,在循环开始期间评估len-它变得与使用{{1}相同}。
但是range(0, 4)
每次您要启动循环时都会检查该值。到那时while
发生了变化,因此l
及其长度也发生了变化。
要比较的另一件事是存储l.copy()
,然后运行while循环:
l.copy()
在这里,l = [6, 7, 8, 9]
lcopy = l.copy()
i = 0
while i < len(lcopy):
l.pop()
i += 1
print(l)
已经是副本,它在循环期间不会更改大小(只有lcopy
会更改大小,我们现在不每次都创建新副本!)
有更好的方法吗?
是的。列表是类并且具有方法,您不必在大多数时间手动进行操作。 -l