python列表删除元素整理

Posted python-dd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python列表删除元素整理相关的知识,希望对你有一定的参考价值。

先看一个例子:

test1 = [‘a‘,‘b‘,‘c‘,‘‘,‘‘]
for
i in test1: if i == ‘‘: test1.remove(i) #删除空元素 print(test1)

>>>[‘a‘, ‘b‘, ‘c‘, ‘‘]

这时发现并没有达到我们想要的结果,原因分析如下:

要了解一下python列表的数据结构,列表属于连续线性表,它的连续在于有一块连续的内存储存着列表中元素的地址,如图(忽略地址与值所占的字节,只为方便举例子):技术分享图片

技术分享图片

 

当然也可以通过一个代码来看证明一下:

a=[1,2,3]
for i in a:
    print(id(i))
>>>1514106336 #此地址即为左边的连续地址

1514106368
   1514106400

技术分享图片

 

回到问题,当我们删除test1中的空字符时,
列表有三种删除元素方式,del,remove,pop,其中del是python的一个方法不是列表所特有,pop()参数为元素的索引,remove()参数是想要删除的值

用一下del看看会出现什么结果:
a=[1,2,3]
for i in a:
    if i==2:
        del i
        print(id(i))
#报错 NameError: name ‘i‘ is not defined

 

a=[1,2,3]
for i in a:
    if i==2:
        del i #del是解除引用,python中一切皆引用
    try:
         print(id(i))
    except NameError:
        pass
a删除前地址1927704032    删除后输出1927704032
      1927704064            1927704096
       1927704096
 

对比地址的变化,可以得知del删除了该元素内存地址引用。

删除列表中的空元素有这两种方法:

#第一种
test2 = [a,‘‘,b,‘‘,c,‘‘,‘‘]
while ‘‘ in test2:
    test2.remove(‘‘)
print(test2)
>>>[a, b, c]
#第二种
test2_new = [i for i in test2 if i != ‘‘] #生成一个新的列表

即删除列表中指定元素建议使用上述两种方法,不要用for循环。

上面记录是写代码时踩的坑,有不严谨或者错误的地方期望大家指正。

 












以上是关于python列表删除元素整理的主要内容,如果未能解决你的问题,请参考以下文章

13 个非常有用的 Python 代码片段

即学即用的 30 段 Python 实用代码

python -- 优雅地删除字符列表中的空字符及None元素

Python代码阅读(第13篇):检测列表中的元素是否都一样

python代码:删除列表中相同的元素

python 列表删除元素问题?