我想知道在python中是否可以同时将一个字符串拆分为1和3个空格。例如,我有string:
Hi There
并假设此字符串是用莫尔斯电码编写的。每个单词用3个空格分隔,每个单词用1个空格分隔
.... .. - .... . .-. .
这在python中是可能的吗?如果是的话,我该怎么做?
答案 0 :(得分:3)
分开两次;一次在3个空格中,然后在列表理解中单个空格上的每个单词:
[word.split(' ') for word in sentence.split(' ')]
这也为你提供了很好的嵌套列表;毕竟,你不想失去单词之间的界限。
演示:
>>> sentence = '.... .. - .... . .-. .'
>>> [word.split(' ') for word in sentence.split(' ')]
[['....', '..'], ['-', '....', '.', '.-.', '.']]
如果您坚持使用一个长列表,只需使用word.split()
调用分割任意宽度空格:
sentence.split()
这会产生一个单独的莫尔斯字母列表,所有这些字母混杂在一起:
>>> sentence.split()
['....', '..', '-', '....', '.', '.-.', '.']
答案 1 :(得分:1)
按要求回答您的问题,
In [17]: s = '.... .. - .... . .-. .'
In [18]: s.split()
Out[18]: ['....', '..', '-', '....', '.', '.-.', '.']
或者,如果单词边界由其他字符(例如标签\t
)指示:
In [18]: [l for w in s.split('\t') for l in w.split()]
Out[18]: ['....', '..', '-', '....', '.', '.-.', '.']
......当然,你自己也失去了界限。
答案 2 :(得分:1)
此外,您可以使用map
sentence = '.... .. - .... . .-. .'
splitted_sentence = map(lambda x: x.split(), sentence.split(' '))
splitted_sentence
Out[21]: [['....', '..'], ['-', '....', '.', '.-.', '.']]
sentence.split(' ')
会将sentence
分成list
个单词,map
会将split
分配到每个单词。
答案 3 :(得分:0)
您可以决定不关心两个/三个空格,然后先用一个空格分割。输出列表太长,但空格所在的条目现在都是空的。这些都可以一次性过滤掉。
在Python 3.x中:
list(filter(None,'.... .. - .... . .-. .'.split(' ')))
(显然,如果您知道空间组合的位置,您也可以构建正则表达式)