Python字符串中查找子串小技巧


Posted in Python onApril 10, 2015

惭愧啊,今天写了个查找子串的Python程序被BS了…

如果让你写一个程序检查字符串s2中是不是包含有s1。也许你会很直观的写下下面的代码:

#determine whether s1 is a substring of s2 

def isSubstring1(s1,s2): 

    tag = False 

    len1 = len(s1) 

    len2 = len(s2) 

    for i in range(0,len2): 

        if s2[i] == s1[0]: 

            for j in range(0,len1): 

                if s2[i]==s1[j]: 

                    tag = True 

    return tag

可是这是Python,我们可以利用字符串自带的find()方法,于是可以这样:

def isSubstring2(s1,s2): 

    tag = False 

    if s2.find(s1) != -1: 

        tag = True 

    return tag

悲情的事就在于此,原来Python中的关键字"in”不仅可以用于列表、元祖等数据类型,还可以用于字符串。所以,这里只需要直接一行代码搞定:
def isSubstring3(s1,s2):

    return s1 in s2

后知后觉了,惭愧;-)

类似的,假设要在字符串中,查找多个子串是否存在,并打印出这些串和首次出现的位置:

def findSubstrings(substrings,destString):

    res =  map(lambda x:str([destString.index(x),x]),filter(lambda x:x in destString,substrings))

    if res:

        return ', '.join(list(res))

 

;-)  very cool~

UPDATE: 如果你不习惯最后面这种看起来很复杂的语法也没关系,可以使用列表解析,更加简洁:
def findSubstrings(substrings,destString):

    return ', '.join([str([destString.index(x),x]) for x in substrings if x in destString])
Python 相关文章推荐
Python 命令行参数sys.argv
Sep 06 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
python调用staf自动化框架的方法
Dec 26 Python
Python中Numpy ndarray的使用详解
May 24 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
构建高效的python requests长连接池详解
May 02 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
使用tkinter实现三子棋游戏
Feb 25 Python
简单介绍Ruby中的CGI编程
Apr 10 #Python
详细介绍Ruby中的正则表达式
Apr 10 #Python
对于Python的Django框架部署的一些建议
Apr 09 #Python
Python线程中对join方法的运用的教程
Apr 09 #Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 #Python
详解Python中的正则表达式的用法
Apr 09 #Python
Python中几种操作字符串的方法的介绍
Apr 09 #Python
You might like
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python错误的处理方法
2020/06/23 Python
Python如何对XML 解析
2020/06/28 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
启动一个线程是用run()还是start()
2016/12/25 面试题
自荐信怎么写好
2013/11/11 职场文书
2014年班务工作总结
2014/12/02 职场文书
员工加薪申请报告
2015/05/15 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
深入详解JS函数的柯里化
2021/06/09 Javascript
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫