python - for in 循环相同,但结果不同
问题描述
# Problem: Transfer the elements in list1 to list2, and finally list1 is empty
list1=["c++","java","python","sql","javascript"]
list2=[]
我第一次写这个:
for i in list1:
a=list1.pop()
list2.append(a)
print("list1=",list1)
print("list2=",list2)
结果:
>>>
list1= ['c++', 'java']
list2= ['javascript', 'sql', 'python']
我很快意识到list1.pop()导致list1不断缩小,我无法获取list1,所以聪明的举动变成了这个,(然后困扰我的问题来了)
list1=["c++","java","python","sql","javascript"]
list2=[]
for i in range(len(list1)):
a=list1.pop()
list2.append(a)
print(list1)
print(list2)
结果:
>>>
list1= []
list2= ['javascript', 'sql', 'python', 'java', 'c++']
成功了,因为不知道为什么通过了,所以加了几张打印出来看看过程中发生了什么
list1=["c++","java","python","sql","javascript"]
list2=[]
for i in range(len(list1)):
print(i)
print(len(list1))
print(range(len(list1)))
print("__ __ __ __ __ __ __ __\n")
a=list1.pop()
list2.append(a)
print("list1=",list1)
print("list2=",list2)
结果:
>>>
0
5
range(0, 5)
__ __ __ __ __ __ __ ___
1
4
range(0, 4)
__ __ __ __ __ __ __ ___
2
3
range(0, 3)
__ __ __ __ __ __ __ ___
3
2
range(0, 2)
__ __ __ __ __ __ __ ___
4
1
range(0, 1)
__ __ __ __ __ __ __ ___
list1= []
list2= ['javascript', 'sql', 'python', 'java', 'c++']
按理说 list1 和 range(len(list1)) 是相联的,而且两者同时归约。
但是..我跑了两次,结果显示:for i in range(len(list1))确实保持了初始状态,让我取range(len(list1)),得到i=0,1,2, 3, 4 五个值,但是...for i in list1 以第三个值结束"python"
...
解决方案
for 指令从 in 之后指定的对象创建一个迭代器。该迭代器在每次迭代时返回该迭代器的 next()。当您从列表中弹出项目(第一种方法)时,next() 在 3 次迭代和停止后不再具有值。当您使用范围时,首先创建范围对象及其迭代器,并且列表弹出保持不变。
推荐阅读
- javascript - 如何在 React 中用红色边框单击按钮突出显示空的强制(*)输入字段?
- openfin - 我可以在我的应用程序关闭后在 OpenFin 中推送通知吗?/ 如何让我的 OpenFin 应用在后台运行?
- oracle - ORA-00933: SQL 命令未正确结束“找不到解决方案”
- c++ - 对自定义对象的大型 std::vector 进行排序
- c - 当我尝试使用 write (man 2 write) 函数时,为什么这段代码会冻结?
- javascript - 在 javascript 中访问和创建属性
- google-maps - Umbraco 中的“Google Map”属性编辑器...如何设置 ApiKey?
- angular - 在 Angular 应用程序中,TSLint 可以通过路径映射 iso 通过相对路径强制导入模块吗?
- javascript - 通过 ViewerJS 获取 PDF 中的页数
- r - 如何根据另一个变量分离一个变量