Python 非常奇妙的循环行为:列出更改标识。发生了什么事?
做了这件事之后Python 非常奇妙的循环行为:列出更改标识。发生了什么事?,python,loops,for-loop,scope,Python,Loops,For Loop,Scope,做了这件事之后 list2 = [x for x in range(10)] list1 = [ x for x in range(10,20)] for k, list1 in enumerate([list1,list2]): for number, entry in enumerate(list1): print number, entry 突然id(list2)==id(list1)计算为True?到底发生了什么事?循环运行时,第一个输出似乎与预期不符:
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
for k, list1 in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
突然id(list2)==id(list1)
计算为True?到底发生了什么事?循环运行时,第一个输出似乎与预期不符:
010、1112、…00、12、23、
第二部分给出:
0,11,22
这怎么可能
只需将代码更改为:
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
摆脱这种行为
for k, NEWVAR in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
你写道:
list1 = [ x for x in range(10,20)]
然后:
for k, list1 in ...
您正在为两个不同但混合的对象使用相同的名称list1
!这不会有什么好结果
只需为循环使用不同的名称:
for k, l in enumerate([list1,list2]):
for number, entry in enumerate(l):
请记住,在Python中,大致上只有两个作用域:
- 模块范围和
- 功能范围
列表1
:
for k, list1 in enumerate([list1,list2]):
这意味着在上一次迭代中,您隐式地执行了list1=list2
从
enumerate()返回一个元组,该元组包含一个计数(起始值默认为0)和通过在序列上迭代获得的值
在for循环中,最后一个赋值给
list1
istlist2
,这就是等式成立的原因
您希望for循环中的变量仅限于循环,但事实并非如此。例如:
for i in range(0, 2):
pass
print(i)
哪些产出:
1
但是循环是否应该在循环的名称范围中创建新变量?@pindakaas:不,该变量不限于for循环范围。看见