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

浏览: 1168

这是菜鸟学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).找最长的单词

image.png

最长的单词是satisfied

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

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

image.png

>>

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

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

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

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

image.png

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

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

4).使用最频繁的单词

image.png

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

2.字符串的分割

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

比如:

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

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

1).霸王硬上弓split

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

image.png

  • 首先我们要分割的分割符放在一个列表里面[';','|',',','\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篇,需要的童鞋翻一下历史文章)

image.png

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

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

3.字符串的拼接

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

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

1).用+号拼接

image.png

>>

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']

image.png

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

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

4)用+和join的区别

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

image.png

>>

cost:0.142536878586

cost:0.0240750312805

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


推荐 1
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册