Python - 如何只将混合列表中的数字转换为float?

时间:2017-08-30 09:28:09

标签: python python-3.x list dictionary

我正在尝试学习Python而且我遇到了问题,所以如果我有类似的东西:

data_l = ['data', '18.8', '17.9', '0.0']

我如何做到这一点?

data_l = ['data', 18.8, 18.9, 0.0]

4 个答案:

答案 0 :(得分:4)

您可以创建一个简单的实用程序函数,如果可能,可以将给定值转换为float,或者按原样返回:

list

请不要使用内置函数的名称和(str, float, float, float)等类型作为变量名。

由于您的数据实际上具有结构而不是真正混合的字符串和数字列表,因此data_conv = (data_l[0], *(float(v) for v in data_l[1:])) 的4元组似乎更合适:

# You could also just convert each float separately since there are so few
data_conv = tuple([data_l[0]] + [float(v) for v in data_l[1:]]) 

或旧的Python版本

var typemap = mapper.ConfigurationProvider.FindTypeMapFor<TSource, TDestination>();

答案 1 :(得分:2)

您可以使用str.isdigit方法和列表理解:

list = [int(s) if s.isdigit() else s for s in list]

这里有live example

答案 2 :(得分:1)

普遍做法:

data = [s if i == 0 else float(s) for i, s in enumerate(data)]

如果结构是固定的:

data = [data[0]] + [float(s) for s in data[1:]]

另一个:

isdigit

data = [int(s) if s.isdigit() else s for s in data] 适用于正整数:

android:autofillHints

答案 3 :(得分:0)

上述方法正在发挥作用,但由于混合列表也可以包含整数值,因此我添加了额外的检查。

def validate(num):
    try:
        return int(num)
    except (ValueError, TypeError):
        try:
            return float(num)
        except (ValueError, TypeError):
            return num


vals_ = ['cat' ,'s-3-f','7390.19','12']
new_list = [validate(v) for v in vals_]  

输出:

['cat', 's-3-f', 7390.1, 12]