如何转换间距不均匀的浮点字符串的一个元素列表

2024-09-30 16:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我尝试将浮点字符串转换为间距均匀的字符串

floating_num = ['6.7 6.8 6.9 7.0 7.1']

第一步:使用string方法string.split()

floating_num = floating_num[0].split(' ')

得到了含有5个元素的liststringfloat

floating_num = ['6.7', '6.8', '6.9', '7.0', '7.1']

步骤2:然后使用列表理解将每个元素转换为float

floating_num = [float(x) for x in floating_num]

然后得到一个listfloat和5个float类型元素

floating_num = [6.7, 6.8, 6.9, 7.0, 7.1]

我的问题是:

我试图转换floating_num = ['6.7 6.8 6.9 7.0 7.1'],但是每个浮点字符串之间的间距是非同调的。例如,6.7和6.8之间有2个空格,6.8和6.9之间有1个空格,6.9之间有3个空格,等等。 如何将其转换为floatlist? 我试过第一步,得到了这个结果

['6.7', '', '6.8', '6.9', '', '', '7.0', '', '7.1'] 

因为我在split()方法中使用的分隔符只有1个间距' ',所以我得到了值为''的元素。 当我把它转换成浮点数时,我得到了一个错误:

ValueError: could not convert string to float.

字符串方法split()可以应用于此吗?或者还有其他方法


Tags: 方法字符串元素列表string步骤floatnum
3条回答

在没有参数的情况下使用.split可以处理多个空格

x = '6.7  6.8 6.9   7.0  7.1'
[float(y) for y in x.split()]
# returns:
[6.7, 6.8, 6.9, 7.0, 7.1]

给予

floating_num = ['6.7  6.8 6.9   7.0  7.1']

选项1:使用regex拆分

import re
temp = re.split('\s+', floating_num[0])
result = [float(x) for x in temp]
print(result)
#[6.7, 6.8, 6.9, 7.0, 7.1]

选项2:不带正则表达式:仅将值转换为非空的浮点值

temp = floating_num[0].split(' ')
result = [float(x) for x in temp if x]
print(result)
#[6.7, 6.8, 6.9, 7.0, 7.1]

过滤一下:

>>> s = '6.7  6.8 6.9   7.0  7.1'
>>> [float(x) for x in s.split(" ") if x != ""]
[6.7, 6.8, 6.9, 7.0, 7.1]

相关问题 更多 >