Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 非常奇妙的循环行为:列出更改标识。发生了什么事?_Python_Loops_For Loop_Scope - Fatal编程技术网

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中,大致上只有两个作用域:

  • 模块范围和
  • 功能范围

您正在for循环中重新分配
列表1

for k, list1 in enumerate([list1,list2]):
这意味着在上一次迭代中,您隐式地执行了
list1=list2

enumerate()返回一个元组,该元组包含一个计数(起始值默认为0)和通过在序列上迭代获得的值


在for循环中,最后一个赋值给
list1
ist
list2
,这就是等式成立的原因

您希望for循环中的变量仅限于循环,但事实并非如此。例如:

for i in range(0, 2):
    pass

print(i)
哪些产出:

1

但是循环是否应该在循环的名称范围中创建新变量?@pindakaas:不,该变量不限于for循环范围。看见