a=[1,2,1,4,1,]
n=a[0]
while n<len(a)+1:
if a[n]==1:
a.remove(a[n])
n=n+1
print (a)
这样写执行的结果列表最后的1删不掉
a=[1,2,1,4,1,]
n=a[0]
while n<len(a)+1:
if a[n]==1:
del a[n]
n=n+1
print (a)
判断条件下的删除改成del,最前面的1删不掉。
a=[1,2,1,4,1,]
n=a[0]
while n<len(a)+1:
if a[n]==1:
a.pop(n)
n=n+1
print (a)
把判断条件下的删除改成pop,最前面的1也是删不掉
a=[1,2,1,4,1,]
for i in a:
if i==1:
a.remove(1)
print (a)
改成for循环,又没问题
现在有个问题,就是删除重复值1,for循环配合del,pop,remove怎么写,while循环配合del,pop,remove代码又该怎么写。可能我的问题有些复杂。请原谅我是小白。希望大神不吝赐教。谢谢
首先,python中是很注重缩进的,您的排版上最好修改一下
暂且按照现在的格式来看,第一段代码应该是这样的
a=[1,2,1,4,1,]
n=a[0]
while n<len(a)+1:
if a[n]==1:
a.remove(a[n])
n=n+1
print (a)
这段代码的问题在于:
1、循环中n是作为下标使用的,但是一开始的赋值却是n = a[0],n为列表a的第0号元素(也就是第一个),即n = 1
2、循环条件的判断n<len(a)+1,则n会取到5,但是列表的下标是从0开始,到a[5]的时候已经没有取值了循环条件的判断n<len(a)+1,则n会取到5,但是列表的下标是从0开始,到a[5]的时候已经没有取值了
3、判断条件是a[n]==1,也就是说这个代码的作用不在于去重,而是要删除所有为1的元素判断条件是a[n]==1,也就是说这个代码的作用不在于去重,而是要删除所有为1的元素
4、a.remove(a[n]),删除不是用下标删除而是判断删除这个值,根据上边的判断条件,这一句就相当于a.remove(1)
这段代码看下来就是,n从1开始取值,直到5,判断列表中后四个元素是否等于1,如果等于1,则从列表中删除一个元素1,但是删除时用的取值删除,因此会从第0号元素的1开始,后四位中有两个1,因此有两次判断为True执行删除,自然删不掉最后的1
改正:
a=[1,2,1,4,1,]
n=0
while n<len(a):
if a[n]==1:
a.remove(a[n])
n=n+1
print (a)
第二段代码的错误和第一段完全相同,只是删除的方法换了而已改正方法和第一段相同
第三段代码的错误也基本一样,但是本段的a.pop(n)是利用下标删除的,所以删除的是后两个1
最后一段没问题是因为for i in a这个语句是从头遍历的,所以判断并删除没有出现错误
你的问题不复杂,但是基础差的太多了,而且这个代码不是一般意义上的去重,而是去掉列表中的元素1
←如果以下回答对你有帮助,请点击右边的向上箭头及采纳下答案
不需要使用循环,用set就可以剔除重复项了
a=[1,2,1,4,1,]
b = list(set(a)) ##剔除重复项,但会改变顺序
b.sort(key=a.index) ##b列表按a列表顺序排序
print(b)
a = [1,2,1,4,1]
while 1 in a:
a.remove(1)
print(a)