2014-02-23 39 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

相关问题