在 Python中,认为以下值为假:

None # None值

False # False值

0 # 数值零不管它是int,float还是complex类型

'',(),[] # 任何一个空的序列

{} # 空的集合

如果一个列表中含上面值为假的元素,要去除的话,可以使用内置函数的filter默认的参数None。

可以先看下filter内置函数的帮助文档

> help(filter)
Help on built-in function filter in module __builtin__:
 
filter(...)
 filter(function or None, sequence) -> list, tuple, or string
 
 Return those items of sequence for which function(item) is true. If
 function is None, return the items that are true. If sequence is a tuple
 or string, return the same type, else return a list.
 
>

从上面的doc文档可以看出,第一个参数可以为一个函数,也可以为None.

如果第一个参数为函数

> def odd(n):
...  return n % 2 == 1
...
> filter(odd, range(10))     # 第一个参数为一般函数
[1, 3, 5, 7, 9]
>
> filter(lambda x: x % 2 == 0, range(10)) # 第一个参数为匿名函数
[0, 2, 4, 6, 8]

如果第一个参数为None的话,则默认会去除序列中所有值为假的元素

> L = [1,'',0,'A',None,[1,2],False,3.14,[],{'a':1}, {}]
> filter(None, L)
[1, 'A', [1, 2], 3.14, {'a': 1}]
>

如果复杂一点,要过滤列表的False的值过滤点,再将" "文件填充为"default",可以这样:

> L = [[], 1, "", None, False, {}, 3.14, " "]
> map(lambda x:x if x != " " else "default", filter(None, L))
[1, 3.14, 'default']

如果再复杂一点,即要去除值为假的元素,而且要去除诸如:' ', " "等多个空字符的元素,上面的就不行了。这个时候就必须做下处理,增加一个函数来处理内含一个或多个空字符的元素:

> L = [1,'',0,'A'," ", None,[1,2],False,3.14,[],{'a':1}, {}]
> filter(lambda s: s and (type(s) != str or len(s.strip()) > 0), L)
[1, 'A', [1, 2], 3.14, {'a': 1}]
>

以上这篇在Python中使用filter去除列表中值为假及空字符串的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?