Python 如何删除列表中的空值
今天在获取android性能CPU测试数据时,发现这么一个问题:
# -*- coding:utf-8 -*- import os
import time cpuInfo = os.popen(r'adb shell top -d 1 -n 1 | findstr com.google.dialer').read()
print (cpuInfo)
cpuDetail = cpuInfo.split(" ")
print (cpuDetail)
输出为:
22542 u0_a118 10 -10 1.2G 143M 81M S 148 16.2 9:29.80 com.google.dialer ['22542', 'u0_a118', '', '', '', '', '', '10', '-10', '1.2G', '143M', '', '81M', 'S', '', '148', '', '16.2', '', '', '9:29.80', 'com.google.dialer\n\n']
其中输出的列表中148这个值本为我要获取的CPU数据,本以为这个列表相对固定,我就直接去通过列表索引[15]即可获得该值,但发现多执行几次之后,所要的CPU数据并不是在固定位置,有时在第15位,有时在第16位,本能的觉得这个通过相对位置不可靠,得找一个可靠的方法才行。
仔细瞧这些列表,发现在CPU数值前面的全部是空值,其它项是每次都会有值输出,那么就好办了只要使用列表的 remove方法将空值删除不就可以了。
下面是删除空值方法:
cpuInfo = os.popen(r'adb shell top -d 1 -n 1 | findstr com.google.dialer').read()
print (cpuInfo)
cpuDetail = cpuInfo.split(" ")
# 方法一
while '' in cpuDetail:
cpuDetail.remove('')
print (cpuDetail) # 方法二
new_list = [i for i in cpuDetail if i !='']
print (new_list)
两种删除列表空值方法的输出如下:
['22542', 'u0_a118', '10', '-10', '1.2G', '89M', '70M', 'S', '125', '10.1', '9:53.49', 'com.google.dialer\n\n']
['22542', 'u0_a118', '10', '-10', '1.2G', '89M', '70M', 'S', '125', '10.1', '9:53.49', 'com.google.dialer\n\n']
有人会提出疑问,可不可以用 for 循环来操作,接下来会告诉你为什么不能用for 循环,如下:
cpuInfo = os.popen(r'adb shell top -d 1 -n 1 | findstr com.google.dialer').read()
print (cpuInfo)
cpuDetail1 = cpuInfo.split(" ")
print ("删除空值前的输出如下:\n",cpuDetail1)
cpuDetail2 = cpuInfo.split(" ") for i in cpuDetail2:
if i == '':
cpuDetail2.remove(i)
print ("删除空值后的输出如下:\n",cpuDetail2)
输出如下:
删除空值前的输出如下:
['22542', 'u0_a118', '', '', '', '', '', '10', '-10', '1.2G', '', '94M', '', '70M', 'R', '', '130', '', '10.7', '', '10:10.79', 'com.google.dialer\n\n']
删除空值后的输出如下:
['22542', 'u0_a118', '10', '-10', '1.2G', '94M', '70M', 'R', '130', '', '10.7', '', '10:10.79', 'com.google.dialer\n\n']
通过输出可以看出它只把前面五个空值给删除了,后面的空值还是仍然存在。
for的计数器是依次递增的,但列表的内容已通过remove更改,i迭代的值为 ‘’ ‘’ ‘’然后越界,所以,只能删除前五个空元素。
这个问题算是大家非常容易忽略的细节问题。在遍历列表时,特别要注意遍历过程中不要对原列表进行增删操作,以免影响迭代过程。
Python 如何删除列表中的空值的更多相关文章
- python中如何删除列表中的所有元素
今天写代码的时候遇到一个小问题,Python中要删除列表中的所有元素.Python本身就提供了pop.remove.del这些删除的函数.我想着用循环实现,结果很麻烦.几番周折上了stackoverf ...
- Python删除列表中元素
Python中列表(list)是很常用的数据结构,删除列表中的元素有几种方法 列表的remove方法 lst = [1, 1, 3, 4] lst.remove(1) # lst->[1, 3, ...
- for循环删除列表中元素遇到的漏删的问题(python)
问题描述:python中通过for循环来删除列表中的两个相邻的元素,存在漏删的问题 比如说下面的例子,准备删掉2和3,但是结果是2删掉了,3没删掉 是因为把2删掉后3的下标就变成了1,但是原本下标为1 ...
- python——删除列表中的元素
在python中,删除列表元素的方法有三种,分别为remove(),del(),pop()函数 (1)remove() >>> name = ['小明','小华','小红','小李' ...
- python中循环删除列表中元素时的坑!
循环删除列表中元素时千万别用正序遍历,一定要用反序遍历! 废话不多说,先上案例代码: def test(data): for i in data: data.remove(i) return data ...
- python删除列表中元素的方法
删除列表中元素的三种方法-remove.pop.del 1 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 2 举例说明: 3 >>> str=[1,2,3,4, ...
- python删除列表中得重复得数据
解决思想:将列表转换为 集合,利用集合删除重复数据得特性删除重复数据,然后将集合转换为列表 #删除列表中得重复元素 def delect_1 (lt): s = set(lt) lt = list(s ...
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...
- React 点击删除列表中对应项(React 获取DOM中自定义属性)
点击删除按钮,删除列表中对应项本来是React比较基础的应用,可是应用情况变得复杂了以后,我还真想了一会儿才搞定. 简化一下应用场景:点击新增按钮,增加一条输入框,点击输入框旁边的按钮,删除该输入框( ...
随机推荐
- JavaScript之radio遍历
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- PHP与MySQL的关系?
1).mysqli和PDO 属于MySQL的拓展包extension 2)my.ini开启拓展命令 extension=php_mysqli.dll extension=php_pdo_mysql.d ...
- asp.net session mode 几种状态 (转)
开发asp.net应用时,修改web.config中的SessionState节点. stateserver模式: <sessionState mode="StateServer&qu ...
- MVCHtmlHelper使用
实例产品源码下载地址:http://www.jinhusns.com/Products/Download
- [android] 手机卫士项目
按照模块组织代码的包结构:各个模块之间的业务是独立的 风行网 ----播放器 com.funshion.android.player ----下载模块 com.funshion.android.dow ...
- Markdown字体大小与颜色
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的! CSDN-markdo ...
- 支持开源,推动Orchard
希望正在研究果园,和对果园感兴趣的,加入Orchard高级开发群,进行交流和讨论及深入研究Orchard开发,我们致力寻求志同道合推动Orchard发展的屌丝!!! 干净.专注.社区力量的圈子
- 5大JavaScript前端框架简介
译者按: 简要介绍五大前端框架特性 原文: Top 5 JavaScript Frameworks 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用 ...
- deepin使用笔记-解决蓝牙设备开机自动开启的问题
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.安装蓝牙驱动管理 #apt-get install blueman 2.打开蓝牙驱动管理,关闭设备 3.关闭蓝牙开机启动服务 ...
- Archlinux/Manjaro使用笔记-使用makepkg安装软件 报错:未找到strip分割所需的二进制文件 的解决方法
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 使用archlinux或manjaro安装aurman时遇到如下报错 错误:未找到strip分割所需的二进制文件 原因:未安装g ...