将字符串拆分为不包括空格的字符

时间:2014-02-23 01:20:53

标签: python

我有一个代码:

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",....]

不同之处在于没有空白/空白条目。

3 个答案:

答案 0 :(得分:4)

[char for char in string if not char.isspace()]

或者如果您只关心ASCII空格字符,而不是所有空格,

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

或者如果您真的只想保留与\w匹配的字符:

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

findall版本只会保留字母,数字和下划线。如果这就是你想要的,请继续使用它。

答案 1 :(得分: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

答案 2 :(得分:1)

只需使用列表和replace,这里不需要任何正则表达式。

>>> list('hello how are you'.replace(' ', ''))
['h', 'e', 'l', 'l', 'o', 'h', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u']