如何玩轉Python裏的字符串,這是一系列的總結(上)

今天我就把字符串的技巧先粗略總結一下,算是先熱個身吧.

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的效率比+要高很多很多。

微軟近日在官方博客宣佈,其免費和跨平臺代碼編輯器 Visual Studio Code 已默認被包含在 Anaconda 發行版中。Python 用戶現在可以在安裝 Anaconda 的同時輕鬆安裝 Visual Studio Code ,以提供出色的編輯和調試體驗,微軟還爲 Anaconda 用戶量身定製了專用功能。

Anaconda 是一個流行的 Python 發行版,主要用於數據科學和信號處理等領域,可爲 Windows、Mac 和 Linux 上的用戶提供簡化的 Python 環境。

此次合作也是微軟投資 Python 社區的又一個示例。微軟在去年 9 月曾宣佈計劃將 Python 引入 Azure 機器學習,Visual Studio 和 SQL Server 中。 據微軟稱,Microsoft Python Extension for Visual Studio Code 是 VS Code marketplace 中下載次數最多的擴展插件,迄今爲止已有超過 600 萬次的下載。

發佈了2 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章