如题:

给定一个数组,其中该数组中的每个元素都为字符串,删除该数组中的空白字符串。

_list = ["A", "", "", "B", "", "C", "", "", "D", "", ' ']

根据廖大文章,答案是这样的:
def not_empty(s):
return s and s.strip() print(list(filter(not_empty, _list)))

结果:

['A', 'B', 'C']

Why does “return s and s.strip()” work when using filter?

用filter()来过滤元素,如果s是None,s.strip()会报错,但s and s.strip()不会报错

>>> _list = ["A", "", "", "B", "", "C", "", "", "D", "", ' ',None]
>>> def not_empty(s):
... return s and s.strip()
...
>>> print(list(filter(not_empty, _list)))
['A', 'B', 'C', 'D']

>>> def not_empty(s):
... return s.strip()
...
>>> print(list(filter(not_empty, _list)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in not_empty
AttributeError: 'NoneType' object has no attribute 'strip'

 

涉及的知识点:

1. filter原理:

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象。

此函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数,

然后返回 True 或 False,最后将返回 True 的元素放到新列表中。 格式:filter(function, iterable)

2. python的and 返回值

>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 'b' and ''
''
>>> 'a' and 'b' and 'c'
'c'
>>> '' and None and 'c'
''

在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

如果布尔上下文中的某个值为假,则 and 返回第一个假值。

3. strip()方法作用

去掉字符串前、后的空白字符 (即空格)

>>> print("     j d s fk     ".strip())
j d s fk
												

为什么 “return s and s.strip()” 在用 filter 去掉空白字符时好使?的更多相关文章

  1. Python初识(一)

    首先我有编程语言的基础,你也有就最好了,这样会很快认识Python. 当然由于本人见识和学识的局限性,请广大猿/媛们多多包涵与指正(希望多评论哦),共同进步嘛. ◆ 准备环境:到python官网下载p ...

  2. Python 第五天

    函数式编程 高阶函数 1.变量可指向函数 func = abs print(func(-1)) #1 2.函数可以作为参数传入另外的函数这也就是高阶函数 def add(x,y,func): prin ...

  3. python 学习笔记:python例子

    廖雪峰python网站 #if els # -*- coding: utf-8 -*- #list是一种有序的集合,可以随时添加和删除其中的元素. ''' classmates=['a','b','c ...

  4. day16 函数的用法:内置函数,匿名函数

    思维导图需要补全 : 一共有68个内置函数: #内置:python自带 # def func(): # a = 1 # b = 2 # print(locals()) # print(globals( ...

  5. Python3基础-特别函数(map filter partial reduces sorted)实例学习

    1. 装饰器 关于Python装饰器的讲解,网上一搜有很多资料,有些资料讲的很详细.因此,我不再详述,我会给出一些连接,帮助理解. 探究functools模块wraps装饰器的用途 案例1 impor ...

  6. 【Python】【函数式编程】

    #[练习] 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程: ax2 + bx + c = 0 的两个解. 提示:计算平方根可以调用math.sqrt()函数: & ...

  7. Python基础学习(三)

    了解了Python的基础使用,接下来继续练手廖雪峰老师的教学案例. 一.变量可以指向函数 说明,一个函数可以赋值给一个变量,该变量就会具有该函数的功能,举例: gg = abs print( gg(- ...

  8. Python基础笔记(三)

    1. 循环与流程控制 (1) for myList1 = ["A", "B", "C", "D"] # 正序遍历 for ...

  9. Python学习笔记系列——高阶函数(filter/sorted)

    一.filter #filter()函数用于过滤序列.和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素. #filter()函 ...

随机推荐

  1. poi读取、通过poi导出数据库的记录到excl表

    package com.nt.test;   import java.io.File; import java.io.FileInputStream; import java.io.FileNotFo ...

  2. ASP.NET中实现封装与策略模式

    首先把运算方法封装起来,这样在网页界面中直接就可以调用了,不过是换张脸而已! using System; using System.Collections.Generic; using System. ...

  3. MIT挑战(如何在12个月内自学完成MIT计算机科学的33门课程|内附MIT公开课程资源和学习顺序

    译者注:本文译自Scott H. Young的博客,Scott拥有超强的学习能力,曾在12个月内自学完成麻省理工学院计算机科学的33门课程.本文就是他个人对于这次MIT挑战的介绍和总结. 版权声明:本 ...

  4. WinForm中DataGridView的快速查找及将指定行显示到第一行

    /// <summary> /// 快速在已绑定的列表查询车辆 /// </summary> /// <param name="sender"> ...

  5. 用go实现的一个堆得数据结构

    用golang实现的堆,主要提供了两个方法,push和pop及堆的大小,代码如下: package main import ( "errors" "fmt" ) ...

  6. QObject 源代码阅读

    我们进入 qt/src 文件夹.你可能对这里的目录名时曾相识,因为几乎这里的所有文件夹名都对应着 Qt 的模块的名字:gui,network,multimedia等等.我们从最核心的 QtCore 开 ...

  7. Tomcat 启动流程

  8. 使用 TClientDataSet(1)

    本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

  9. 利用ZooKeeper简单实现分布式锁

    1.分布式锁的由来: 在程序开发过程中不得不考虑的就是并发问题.在java中对于同一个jvm而言,jdk已经提供了lock和同步等.但是在分布式情况下,往往存在多个进程对一些资源产生竞争关系,而这些进 ...

  10. MySQL的间隙锁

    什么是间隙锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁:对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也 ...