我想基于空格分割字符串
a = ' girl\n is'
a.split()
['girl', 'is']
我发现分裂后,'\ n'也会消失。我想要的结果是
['girl\n', 'is']
然后,如果我使用.splitlines
方法,返回的结果也不是我想要的。
a.splitlines(True)
[' girl\n', ' is']
你有什么建议吗?谢谢!
答案 0 :(得分:6)
试试这个
[s for s in a.split(' ') if s]
['girl\n', 'is']
答案 1 :(得分:2)
在性能方面,您应该考虑使用列表推导(如 Ursus's answer 中所述)和str.split(' ')
:
>>> a = ' girl\n is'
>>> [word for word in a.split(' ') if word]
['girl\n', 'is']
但是,如果您对功能方法感兴趣,可以使用filter
作为:
>>> list(filter(bool, a.split(' ')))
['girl\n', 'is']
此处a.split(' ')
会根据空间将您的字符串拆分为分隔符和filter
(使用bool)将从列表中过滤掉空字符串。
您的代码问题
正如Python str.split
document所说:
如果未传递分隔符:
或者是
None
,应用了不同的分割算法:连续空格的运行被视为单个分隔符,如果字符串具有前导,则结果将在开头或结尾处不包含空字符串或尾随空格。因此,将空字符串或仅由空格组成的字符串拆分为无分隔符将返回[]。
如果传递分隔符:
连续分隔符未组合在一起,并被视为划分空字符串。使用指定的分隔符拆分空字符串将返回['']。
答案 2 :(得分:2)
你可以使用正则表达式来分割水平空格的任何序列(包括例如标签),但不能垂直:
>>> import re
>>> re.split(r'[^\S\n\r]+', a.strip())
['girl\n', 'is']
# [^...]: not any of ...
# \S: non whitespace
# \n, \r: line breaking white space
# [^\S\n\r]+: one or more non-space or non-line-breaking space
答案 3 :(得分:0)
易于理解:
In:
df_time = pd.Series([val.time() for val in df_time])
Out:
0 13:09:00
1 13:11:00
2 13:13:00
3 13:15:00
4 13:17:00
dtype: object
含义:
b=a.split()
c=[i for i in b if i]
print(c)