234十 2018-12-22 14:33 采纳率: 100%
浏览 3595
已采纳

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条回答 默认 最新

  • _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条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵