|
|
发表于 2019-1-15 16:59:55
|
显示全部楼层
本帖最后由 sunrise085 于 2019-1-15 17:05 编辑
首先解答你的问题。之所以False变成0,是Python机制问题。在Python中,bool类型继承于int类型,所以True==1,False==0,所以在你的程序中False被当做0删除了,然后在末尾添加了一个0 。想让程序跳过False,可以用is语句。稍后附上程序。
再说说你的程序存在的问题。虽然程序能运行出正确结果(暂且忽略False问题),但是你的程序其实有很大的问题。
举个例子:
for循环,第三次,i=2,检测到n[2]=0,程序会修改列表n,新的列表n=[1,0,1,2,0,1,3,"a",0];
for循环,第四次,i=3,此时本来应该检测到n[3]=1,但是由于修改了列表,现在n[3]=2,相当于把愿列表中的第3个元素跳过去了;
这样每次检测到一个0元素,就会跳过一个元素。
程序能得到正确的结果,是因为循环次数是列表的长度,每调整一个0元素的位置,末尾就会多一个0,删除的总是列表最前面的0,执行到后面的时候,0元素已经都放在后面了,但是还是检测到了0元素,就会继续删除前面的0,在末尾添加0.因此也能够输出正确的结果。
实际上每次调整的并不一定是当前检测到的0。
你看一下你的输出结果第四行,本来不是应该为1么?每次出现一个0,就会跳过一个元素,元素'a'最后出现在第七次循环中,之后又出现两个0,是你移动到后面去的两个0 。
我修改之后的程序
- n = [False,1,0,1,2,0,1,3,"a"]
- m=[]
- num=0
- print('调整之前的列表:',n)
- for i in range(len(n)): #查询0元素所在的位置
- if n[i] is 0:
- m.append(i) #保存0元素的位置
- print(m) #输出0元素的位置,这一行可以不写
- for i in m:
- n.pop(i-num) #删除对应的0元素
- n.append(0) #在末尾添加0元素
- num+=1 #每调整一个0元素的位置,之后的元素会向前移动一位,下一个0元素的下标就会减小1
- print(n) #查看这次调整之后的列表,这一行可以不写
- print('调整之后的列表:',n)
复制代码 |
评分
-
查看全部评分
|