u013846785
234十
采纳率81.8%
2018-12-22 14:33 阅读 3.3k

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删不掉

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代码又该怎么写。可能我的问题有些复杂。请原谅我是小白。希望大神不吝赐教。谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    aaether _ether 2018-12-22 07:22

    首先,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

    点赞 2 评论 复制链接分享
  • weixin_39416561 lyhsdy 2018-12-22 06:39

    ←如果以下回答对你有帮助,请点击右边的向上箭头及采纳下答案

    不需要使用循环,用set就可以剔除重复项了

    a=[1,2,1,4,1,]
    b = list(set(a))  ##剔除重复项,但会改变顺序
    b.sort(key=a.index)  ##b列表按a列表顺序排序
    print(b)
    
    点赞 评论 复制链接分享
  • weixin_40098196 weixin_40098196 2019-04-02 14:56

    a = [1,2,1,4,1]
    while 1 in a:
    a.remove(1)
    print(a)

    点赞 评论 复制链接分享

相关推荐