美文网首页Python程序员联盟python程序员
【秘籍总结】玩转Python里的字符串|上篇

【秘籍总结】玩转Python里的字符串|上篇

作者: 菜鸟学python | 来源:发表于2017-10-31 20:17 被阅读290次

这是菜鸟学Python的第108篇原创文章

阅读本文大概需要2分钟

目前累计已经写了100多篇,写了小白入门篇,爬虫数据库篇,以及数据可视化分析.洋洋洒洒,越写越多.下一个阶段我准备开始写机器学习,文本分析.而文本分析里面有一个非常重要技巧就是字符串的处理,今天我就把字符串的技巧先粗略总结一下,算是先热个身吧.

1.字符串里面基本技巧

比如我们有这么一段文本话:

text1='Hi Everyone your work is going to fill a large part of your life. ' \

'And the only way to be truly satisfied is to do what ' \

'you believe is great work in United Nations'

1).找最长的单词

最长的单词是satisfied

2).找单词的长度是5或6

我列出了几个方法去分析,普通的推导列表,或者用高阶函数filter,map

>>

['going', 'large', 'life.', 'truly', 'great', 'United']

['going', 'large', 'life.', 'truly', 'great', 'United']

['going', 'large', 'life.', 'truly', 'great', 'United']

3).列出首字母大写的单词

可以直接用字符串里面的内置函数istitle

也可以用强大的正则表达式去过滤

4).使用最频繁的单词

一般对列表里面的元素统计,我喜欢用collections里面的Counter函数,非常方便

2.字符串的分割

字符串的分割,相信很多小伙伴都会想到split函数,确实split非常方便,但是如果碰到复杂的字符串分割,你怎么办:

比如:

my_strings='qwer|tyu;iop|asd,fgh\tjkl\txyz'

这个字符串里面有很多杂七杂八的分割符,如果想用split()一次搞定,比如写成split('|;,\t')这样是不行的,如果我非常想用split有没有什么办法呢

1).霸王硬上弓split

我们无法用split一次搞定,但是我们可以多次迭代用split来分割

首先我们要分割的分割符放在一个列表里面[';','|',',','\t']

接着我们把my_strings这一串乱码迭代分割,用map来分割

map分割完毕之后会变成一个列表嵌套列表:

[['qwer'], ['tyu'], ['iop'], ['asd,fgh\tjkl\txyz']]

[['qwer'], ['tyu'], ['iop'], ['asd'], ['fgh\tjkl\txyz']]

[['qwer'], ['tyu'], ['iop'], ['asd'], ['fgh'], ['jkl'], ['xyz']]

所以我们一定要用一个新的列表把它碾平

>>

['qwer', 'tyu', 'iop', 'asd', 'fgh', 'jkl', 'xyz']

2).永远的正则

文本的处理永远无法绕开正则,当然有同学说sklearn,NLTK确实不假,但是正则绝对是根基和基础(正则我入门篇里写了3篇,需要的童鞋翻一下历史文章)

导入re模块,用re.split()一招搞定

而且如果你的字符串里面有连续分割符比如|||,只能用正则去处理,上面第一种方法搞不定的

3.字符串的拼接

对于字符串的拼接,我们我们最常用的是+,也可以用join,二者好像看起来一样嘛,其实不一样的

比如:names=['Hello',' James',',',' how',' are',' you', '!']

1).用+号拼接

>>

Hello

Hello James

Hello James,

Hello James, how

Hello James, how are

Hello James, how are you

Hello James, how are you!

Hello James, how are you!

我们把每一次的拼接都打印出来,发现其实每一次都分配了一个新的字符串

2).用join函数

print ''.join(names)

>>

Hello James, how are you!

一次搞定

3).复杂结构的字符混合列表

join函数虽然很好,但是如果list里面的元素种类繁多,怎么办

比如:names2=['Hello',123,'James']

我们可以用一个推到列表或者是高阶map函数把列表里面的元素都str化

或者用第二种方式生成一个生成器迭代一下,开销会小一点.

4)用+和join的区别

主要是开销的问题,如果你的字符串列表很大,很大性能上就会有明显的区别

>>

cost:0.142536878586

cost:0.0240750312805

如果我们有一个一百万的字符串列表,里面有1000000个字符,我们用+和join两种方法去对比,我们用一个装饰器去计算运行时间,发现join的效率比+要高很多很多

关注微信公众号“菜鸟学Python”,留言获得更多干货源码!

相关文章

  • 【秘籍总结】玩转Python里的字符串|上篇

    这是菜鸟学Python的第108篇原创文章 阅读本文大概需要2分钟 目前累计已经写了100多篇,写了小白入门篇,爬...

  • 玩转Python-Windows 10下pip加速300%之秘籍

    玩转Python-Windows 10下pip加速300%之秘籍 Python 安装包时默认会到pypi去下载包所...

  • (转)selenium2入门实例

    上篇-用python玩转selenium:1-准备环境已经介绍了selenium-Python环境配置,或者说安装...

  • 7招秘籍: 教你玩转Python字符串

    阅读本文大概需要7分钟: 日常使用python经常要对文本进行处理,无论是爬虫的数据解析,还是大数据的文本清洗,还...

  • python字符串

    总结一下python字符串,方面自己查阅和复习。 字符串型:Python序列类型,本质:字符串序列 字符串的创建:...

  • python count()方法详解

    Python count()方法 Python 字符串 描述 Python count() 方法用于统计字符串里某...

  • readme.md

    玩转python

  • python中常用的内建函数

    python中常用的内建函数 总结了python中常用的内建函数。 字符串内建函数 join 拼接字符串 完整的简...

  • 半年读书总结

    受@罗磊启发,将自己这半年读过的书做一个整理与总结 1、《微信终极秘籍》2、《玩转微信营销实用攻略》 3、《伟大是...

  • Python—字符串(二)

    上篇讲了python字符串的一些常用方法,现在再来看看字符串的一些不常用的方法吧(个人觉得比较鸡肋的方法)。 ce...

网友评论

  • Lee_DH:你好,最近在学习用pygame模块做一个武装飞船的小游戏,其中在控制飞船持续移动的时候,有一些不是太明白,想请教一下你。
    ---------------------------------------------------实现效果---------------------------------------------------------
    按住右箭头按键不放,飞船持续不断地往右移动,当停止按右箭头时,飞船停止移动。

    -------------------------------------实现过程(书中标准的实现过程)--------------------------------------
    在主程序中,有一个 while True,持续不断地监听键盘事件、以及监听飞船是否应该发生移动事件
    while True:

    #事件检查
    gf.check_events(ship)
    #检测飞船移动
    ship.update()
    事件检查(gf.check_events(ship))逻辑:
    检测右箭头是否被按下,如果被按下,则右移标志位moving_right置为True
    检测飞船是否移动(ship.update)逻辑:
    判断 moving_right 是否为 true,如果为true,则x坐标向右移一位

    ---------------------------------------------------不明白的地方---------------------------------------------------既然事件检查 gf.check_events(ship) 本来就在主程序的 while True里面,是持续不断会循环的,那么当检测到右箭头按键按下时,何必多此一举设置右移标志位moving_right,然后再在主程序检测飞船是否应该移动(ship.update()),根据移动标志位,再改变坐标,直接在检测到右箭头按下时,将飞船的x坐标向右移一位,不就行了吗。

    我试了我说的在判断右箭头按下时,直接将飞船的x坐标向右移一位,移动飞船,但是最终的效果是,按一下会向右移动一下,可是持续按的时候,也只向右移动一下,没有达到持续不断地往右移动的效果
  • Lee_DH:你好,有个问题想问问你,python的命名关键字参数和普通的位置参数有啥区别呀?
    Lee_DH:@菜鸟学python 已看到,谢谢
    菜鸟学python:@胖虎小李 公众号上回复你了

本文标题:【秘籍总结】玩转Python里的字符串|上篇

本文链接:https://www.haomeiwen.com/subject/nckipxtx.html