我想剪切以下字符串:0.343___0.2___0.07___0___0
随机数字和数字之间的随机空格,并获得以下列表:[0.343, 0.2, 0.07, 0, 0]
。怎么办呢?
答案 0 :(得分:4)
执行此操作的最pythonic方式可能是:
b = [float(x) for x in a.split('_') if x]
其中a = '0.343___0.2___0.07___0___0'
@Paul Rooney:
>>a.split('_')
给出
['0.343', '', '', '0.2', '', '', '0.07', '', '', '0', '', '', '0']
然后过滤到预期答案
答案 1 :(得分:0)
在交互式Python终端中工作以演示string.split()
方法的使用。使用filter
进行额外过滤以删除空字符串。请注意filter
返回一个迭代器,因此我们将其包装在list
中以返回一个列表。
>>> s = '0.343___0.2___0.07___0___0'
>>> s.split('_')
['0.343', '', '', '0.2', '', '', '0.07', '', '', '0', '', '', '0']
>>> list(filter(None, s.split('_')))
['0.343', '0.2', '0.07', '0', '0']
过滤掉空字符串的另一种方法是使用列表解析:
>>> [x for x in s.split('_') if x]
['0.343', '0.2', '0.07', '0', '0']
但是,filter
方法比列表理解快得多。如果你也必须转换为花车(抱歉,只是注意到这是问题的一部分),那么列表理解是要走的路:
>>> [float(x) for x in s.split('_') if x]
[0.343, 0.2, 0.07, 0.0, 0.0]
答案 2 :(得分:0)
使用re拆分案例'_'
中分隔符的一个或多个出现位置:
>>> import re
>>> str = "0.343___0.2___0.07___0___0"
>>> list(map(float, re.split("_+",str)))
[0.343, 0.2, 0.07, 0.0, 0.0]
答案 3 :(得分:0)
import re
source = '0.343___0.2___0.07___0___0'
output = [float(each) for each in re.split(r'_+', source)]
print(output)