关于Python中append在for循环的工作逻辑及代码输出的疑问
关于Python中append在for循环里的工作原理解答
嘿,我来帮你理清这个困惑!你的问题核心其实不是append函数的工作逻辑出错了,而是你误解了代码里append的参数是什么~
先看你代码里的关键片段:
for i in range(n): if(a[i]==1): b.append(i)
这里的i是当前循环的索引值(也就是列表a中元素的位置,从0开始计数),而不是元素的值1。当a[i] == 1成立时,我们把这个元素所在的索引位置添加到列表b里,而不是把元素1加进去。
举你给出的例子:
- 当输入
a = [1,0,1]时:- 索引0的元素是1,满足条件,执行
b.append(0),此时b = [0] - 索引1的元素是0,不满足
- 索引2的元素是1,满足条件,执行
b.append(2),最终b = [0,2]
- 索引0的元素是1,满足条件,执行
- 当输入
a = [1,0,0,1]时:- 索引0的元素是1,append(0)
- 索引3的元素是1,append(3)
- 最终
b = [0,3]
而你以为会输出[1,1],是因为误以为代码里写的是b.append(1),但实际上代码传入append的是索引变量i。append函数的工作逻辑完全没问题——它确实是把你传入的对象添加到列表末尾,只是这里的对象是索引值,不是你以为的元素值1。
如果你的需求是收集所有值为1的元素,那代码应该改成b.append(a[i])或者直接b.append(1),但按当前代码的写法,它的功能就是收集所有值为1的元素的索引位置。
内容的提问来源于stack exchange,提问作者James Lo
相关产品推荐
相关产品推荐

