Python程序员联盟python程序员

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

2017-10-31  本文已影响290人  菜鸟学python

这是菜鸟学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”,留言获得更多干货源码!

上一篇下一篇

猜你喜欢

热点阅读