Python嵌套循环中的同一变量具有不同的ID?;
非常简单的Python代码,但是为什么变量Python嵌套循环中的同一变量具有不同的ID?;,python,nested-loops,Python,Nested Loops,非常简单的Python代码,但是为什么变量n具有不同的ID?如何实现此函数以获取car的字典名 a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}] n=0 当n
n
具有不同的ID?如何实现此函数以获取car
的字典名
a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
n=0
当n<3时:
打印(id(n))
对于[n]中的k,键():
如果“car”不在[n][k]中:
n+=1
打印(id(n))
其他:
印刷品(k)
打破
打破
代码的结果是:
140720577618304
140720577618336
您似乎想在列表中搜索
汽车
,并找到哪个钥匙有该列表
a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
对于a中的d:
对于k in d.keys():
如果d[k]中的“car”:
印刷品(k)
打破
输出:
c
id
不是您想要的。当迭代一个未发生变异的iterable时,不要对范围内的i(停止:开始:结束)使用while条件或。相反,您可能希望在iterable中为i设置一个。在你的情况下,一行可能是
a = [{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
answer = [k for d in a for k in d.keys() if 'car' in d[k]]
输出
['c']
Python中的整数是不可变的。通过执行n+=1
,您不是在修改名为n
的对象,而是在覆盖名称以指向新的整数对象。n+=1
分配一个新对象您可以忽略整数的id()
。你有什么问题?您希望得到什么输出?int
值是不可变的n+=1
的行为与n=n+1
完全相同,从n+1
创建一个新的int
(或获取对不同int
的引用),并将结果赋回n
。读取id(i)
的结果不是变量i
的id。它是变量i
值的id。更准确地说,变量i
引用的是对象的id。因此,如果您执行j=123
,那么i=j
,那么id(i)
将等于id(j)
。但是如果你给i
分配一个新值,那么id(i)
将改变。非常感谢,这个输出正是我想要的。真正让我困惑的是id()的函数,现在我已经知道了它。id()
函数可以用于检查对象的id以进行调试,但我会把它作为最后的手段。谢谢。在我编写的上述代码中,我试图更改iterable
,它受的限制,而则受的限制。好像我在最后一句话中把break
放错了。很高兴听到这个消息!如果它有助于考虑接受这个帖子:)我选择了答案,指出了<代码> Id()/<代码>的实际功能,但是我还是要谢谢你。谢谢。此外,@Tom Karzes更清楚地解释了id()
。id(i)
的结果不是变量i
的id。它是变量i
值的id。更准确地说,它是我引用的变量的对象id。因此,如果您执行j=123
,那么i=j
,那么id(i)
将等于id(j)
。但是如果你给i赋值,
那么id(i)
就会改变。