鱼C论坛

 找回密码
 立即注册
查看: 1170|回复: 6

[已解决]如何删除列表里所有空格项

[复制链接]
发表于 2020-1-6 23:48:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


如何删除列表里所有"空格项",?


如题:

a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']


为什么出现以下情况,请大神帮忙解释,为什么不是一遍就遍历清除干净:


第一遍:
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)

>>> print(a)
['-color:#CDEFF8;"', '                ', '2', '                ', '118.190.95.43', '                ', '9001', '                ', '广西', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']


第二遍:
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)

>>> print(a)
['-color:#CDEFF8;"', '2', '118.190.95.43', '9001', '广西', 'HTTP', '                ', '', '', '', '2018-10-02', '', '', '', '', '']


第三遍
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)
               
>>> print(a)
['-color:#CDEFF8;"', '2', '118.190.95.43', '9001', '广西', 'HTTP', '2018-10-02', '', '', '', '']


第四遍
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)

>>> print(a)
['-color:#CDEFF8;"', '2', '118.190.95.43', '9001', '广西', 'HTTP', '2018-10-02', '', '']


第五遍
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)

>>> print(a)
['-color:#CDEFF8;"', '2', '118.190.95.43', '9001', '广西', 'HTTP', '2018-10-02', '']


第六遍
>>> for i in a:
        if (' ' in i) or ('' == i):
                a.remove(i)
               
>>> print(a)
['-color:#CDEFF8;"', '2', '118.190.95.43', '9001', '广西', 'HTTP', '2018-10-02']
最佳答案
2020-1-7 09:23:01
解答一下你的疑惑之处。在第一次遍历的时候,当遇到一个需要删除的元素,将之remove,然后整个列表的元素下标就变了。因此会有一部分元素没有被遍历到。例如:第一次遍历的时候将第一个元素' backgroun'删除了,这时'-color:#CDEFF8;'''变成了第一个元素,但它不会被查询了,接着查下变化后的列表a的第二个元素即'',进行remove,此时,原列表中的第四个元素 '                '变成了第二个元素,被跳过去了,接着被查的是'2',以此向后。只要列表中还有能被remove的元素,遍历时都会有元素被跳过去。

你需要逆序遍历,这样才不会有元素被跳过。
  1. a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']
  2. for i in a[::-1]:
  3.     if (' ' in i) or ('' == i):
  4.         a.remove(i)
  5. for i in a:
  6.     print (i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 00:10:56 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-7 00:19 编辑

       复制的方法:
  1. a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']
  2. b = [x for x in a if x . strip() != '']
  3. print(b)
复制代码

       删除的方法:
  1. a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']
  2. x = 0
  3. while x < len(a):
  4.     if not len(a[x] . strip()):
  5.         del(a[x])
  6.     else:
  7.         x += 1
  8. print(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-7 00:25:55 | 显示全部楼层
  1. a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']

  2. f = lambda x: x if x.replace(" ", "") else None

  3. print(list(filter(f, a)))
复制代码



String.replace(" ", "")  可以去除字符串所含的空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-7 08:38:53 | 显示全部楼层
for i in a:
        if i.strip():
                print(i)

               
backgroun
-color:#CDEFF8;"
2
118.190.95.43
9001
广西
HTTP
2018-10-02
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-7 09:23:01 | 显示全部楼层    本楼为最佳答案   
解答一下你的疑惑之处。在第一次遍历的时候,当遇到一个需要删除的元素,将之remove,然后整个列表的元素下标就变了。因此会有一部分元素没有被遍历到。例如:第一次遍历的时候将第一个元素' backgroun'删除了,这时'-color:#CDEFF8;'''变成了第一个元素,但它不会被查询了,接着查下变化后的列表a的第二个元素即'',进行remove,此时,原列表中的第四个元素 '                '变成了第二个元素,被跳过去了,接着被查的是'2',以此向后。只要列表中还有能被remove的元素,遍历时都会有元素被跳过去。

你需要逆序遍历,这样才不会有元素被跳过。
  1. a = [' backgroun', '-color:#CDEFF8;"', '', '                ', '', '', '', '2', '', '', '', '', '', '                ', '', '', '', '118.190.95.43', '', '', '', '', '', '                ', '', '', '', '9001', '', '', '', '', '', '                ', '', '', '', '广西', '', '', '', '', '', '                ', '', '', '', 'HTTP', '', '', '', '', '', '                ', '', '', '', '2018-10-02', '', '', '', '', '']
  2. for i in a[::-1]:
  3.     if (' ' in i) or ('' == i):
  4.         a.remove(i)
  5. for i in a:
  6.     print (i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 09:31:33 | 显示全部楼层
jackz007 发表于 2020-1-7 00:10
复制的方法:

       删除的方法:

我上面的方式,为什么需要好几遍才能达到效果?问题出在哪里了?想不通
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 09:32:31 | 显示全部楼层
Stubborn 发表于 2020-1-7 00:25
String.replace(" ", "")  可以去除字符串所含的空格

我上面的方式,为什么需要好几遍才能达到效果?问题出在哪里了?想不通
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表