2014-02-23 52 views
0

字符我有一個​​代碼:將一個字符串分解成不包括空白

import re 
def sam(str) 
data=re.split(r'(\w)',str) 
print data 

if __name__== "__main__": 
sam('hello how are you') 

我得到的輸出:

["","h","e","l","l","o","","h","o","w",""....] 

我想分割的這句話不包括空格的每個字符。我怎樣才能得到的輸出:

["h","e","l","l","o","h","o","w",....] 

不同之處是沒有空白/空白條目。

+0

使用'=='代替'='的等號,並且不要在'if'條件之後忘記':'。下次嘗試不在這裏鍵入代碼,只需複製/粘貼。 – Christian

+0

另外,'山姆'應該是真的在爭論。它看起來像是將這些代碼重新輸入到問題框中,而不是從已知的工作代碼中複製/粘貼。將來,複製/粘貼。它更可靠。 – user2357112

+0

是的!謝謝,編輯。 – NBA

回答

1

使用str.replace

In [805]: list(s.replace(' ', '')) 
Out[805]: ['h', 'e', 'l', 'l', 'o', 'h', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u'] 

str.translate

In [808]: list(s.translate(None, ' ')) 
Out[808]: ['h', 'e', 'l', 'l', 'o', 'h', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u'] 

它們倍的速度比列表理解(如@ user2357112提到的)在處理長字符串:

In [827]: s2='hello how are you'*10000 

In [828]: timeit [char for char in s2 if not char.isspace()] 
100 loops, best of 3: 19.5 ms per loop 

In [889]: timeit [char for char in s2 if char != ' '] 
100 loops, best of 3: 14 ms per loop 

In [829]: timeit list(s2.replace(' ', '')) 
100 loops, best of 3: 3.4 ms per loop 

In [830]: timeit list(s2.translate(None, ' ')) 
100 loops, best of 3: 2.87 ms per loop 
+0

[如果不是's2中char的字符'']大約是雙倍。 –

+0

@JustinPoehnelt添加這種情況,應該是'if char!=''',因爲'not'''總是返回'False';) – zhangxaochen

1

只需使用列表和replace,不需要任何rege XP在這裏。

>>> list('hello how are you'.replace(' ', '')) 
['h', 'e', 'l', 'l', 'o', 'h', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u'] 
4
[char for char in string if not char.isspace()] 

,或者如果你只關心ASCII空格字符,而不是所有空白,

list(string.replace(' ', '')) 

,或者如果你真的想只保留匹配\w的漢字:

re.findall(r'\w', string) 

findall版本將只保留字母,數字和下劃線。如果這就是你想要的,請繼續使用它。

+0

如何通過將字符串傳遞給我的函數sam()來使用它? – NBA

+0

@NBA:將'sam'定義爲一個名爲'string'的參數。如果你不知道如何做,那麼[Python教程](http://docs.python.org/2/tutorial/controlflow.html#defining-functions)應該回答你的問題。 – user2357112

+0

我可以使用 - > re.split(r'(\ w)',str)來實現嗎? – NBA

相關問題