数字匹配和字符串匹配

简介:

筛选list里元素是python经常面临的问题之一,其中元素又主要分为“数字”和“字母”,下面就分别说一下如何筛选list里的元素。


筛选序列中的数字元素

1
2
3
4
5
>>> aaa = [ 1 , 2 , 3 , 4 , 5 , - 6 , - 7 , - 8 , - 9 , 0 ]
>>> [num  for  num  in  aaa  if  num> 0 #提取所有大于零的数
[ 1 , 2 , 3 , 4 , 5 ]
>>> [num  for  num  in  aaa  if  num< = 0 #提取所有小于等于零的数
[ - 6 , - 7 , - 8 , - 9 , 0 ]

这样得到的是一个list,如果想要得到一个int,那就

1
2
3
>>> bbb = [num  for  num  in  aaa  if  num> 0 ]
>>>  for  in  bbb:
         print (i)

i就是int。


使用shell通配符进行字母匹配

筛选字母就要用到fnmatch模块,这个模块可以让python认可类似linux的正则表达式。fnmatch模块不仅在3.5好使,在2.6也是自带的。

1
2
3
4
5
6
7
8
9
10
11
12
>>>  import  fnmatch
>>> a = [ "james" , "wade" , "yaoming" , "kevin" , "rose" , "kobe" ]
>>> fnmatch. filter (a, "james" )     #完全匹配a字符串里的james
[ 'james' ]
>>> fnmatch. filter (a, "*e" )     #匹配a字符串里以e结尾的单词
[ 'wade' 'rose' 'kobe' ]
>>> fnmatch. filter (a, "*[en]" )     #匹配a字符串里以e or n结尾的单词
[ 'wade' 'kevin' 'rose' 'kobe'
>>> fnmatch. filter (a, "*![en]" )       #错误用法  
[] 
>>> fnmatch. filter (a, "*[!en]" )     #匹配a字符串里不是以e or n结尾的单词
[ 'james' 'yaoming' ]

这里要注意,这里要用import fnmatch,而不是from fnmatch import fnmatch.如果启用了from fnmatch import fnmatch,会提示AttributeError: 'function' object has no attribute 'filter'。


如果用的是类似数字的方法[name for name in a if fnmatch(a,"*e")],会提示:TypeError: normcase() argument must be str or bytes, not 'list'。

如果把a转成str,又提示:AttributeError: 'function' object has no attribute 'filters'。不过有的书说这个方法是好使的,我的机器却不成功,不知道为什么。


如果是数字与字母混搭...

假设aaa=[1,2,3,4,5,"messi","pique","N/A',"-"],要提取所有的数字的话,可以这么写一个小函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> aaa = [ 1 , 2 , 3 , 4 , 5 , "messi" , "pique" , "N/A" , "xavi" ]
>>>  def  check_int(x):
     try :
         num = int (x)     #int就是挑出数字的关键词
         print (num)
     except  ValueError:
         return  False
     
>>> nums = list ( filter (check_int,aaa))
1
2
3
4
5

这里单独说一下filter函数的用法,filter()里面要有两个参数,一个是定义的函数,另一个是函数作用的list。这两个参数都是必须的,缺一不可。

再举一个例子来说明一下filter()。

 

1
2
3
4
5
6
7
>>> aaa = [ 10 , 99 , 25 , 6 , 7 , 784 , "格里芬" , "圣骑士" - 8 - 34 0 ]
>>>  def  guolvhanshu(x):
         if  x< 10  and  x> 5
             return (x)
>>> result = filter (guolvhanshu,aaa)     #使用 filter函数,里面的参数是guolvhanshu和aaa
>>>  list (result)         #如果是python2.6,可以直接print result
     [ 6 , 7 ]



不熟悉python 3.5的迭代器可以看:http://zhidao.baidu.com/link?url=5ONk1itSIxSv9C9E506oV04NJPSs6LY0Atz0YZujd9gsE5_MBxmcsRp7gB2AimDF7UHJXngAOetzcRnh3bGbn7tZJtR_jjMPBPhQJ6mpwrq



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1767197

相关文章
|
3月前
|
算法 测试技术 C#
【动态规划】【字符串】C++算法:正则表达式匹配
【动态规划】【字符串】C++算法:正则表达式匹配
|
5月前
|
人工智能 Java 机器人
掌握正则验证字串符,轻松搞定字符串匹配
正则验证字串符是一种强大的工具,可以帮助程序员在处理字符串时轻松进行复杂匹配。本文将介绍正则表达式的概念、语法和在编程中的应用,并通过实例演示如何使用正则表达式进行字符串匹配、替换和提取等操作。
|
2月前
|
固态存储 Python
正则表达匹配任意单个字符
正则表达匹配任意单个字符
39 4
|
3月前
|
算法 C#
Leetcode算法系列| 10. 正则表达式匹配
Leetcode算法系列| 10. 正则表达式匹配
|
10月前
|
算法 安全 Swift
LeetCode - #10 正则表达式匹配(前100)
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
10月前
|
算法
KMP 算法:快速匹配字符字串
KMP 算法主要是在一定长度的字符串中快速匹配出所需的目标字符串,也称模式字串,最大特点就是讲究一个快字。
73 0
KMP 算法:快速匹配字符字串
正则表达式 - 最常用正则表达式大全(数字、字符、特殊)
正则表达式 - 最常用正则表达式大全(数字、字符、特殊)
616 0
|
算法 前端开发 程序员
实现正则表达式匹配算法
实现正则表达式匹配算法
实现正则表达式匹配算法
|
算法
LeetCode 43字符串相乘&44通配符匹配
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
85 0
LeetCode 43字符串相乘&44通配符匹配
【正则】至少包括字母数字特殊字符中任意2种的正则表达式
【正则】至少包括字母数字特殊字符中任意2种的正则表达式
268 0