我正在尝试学习Python而且我遇到了问题,所以如果我有类似的东西:
data_l = ['data', '18.8', '17.9', '0.0']
我如何做到这一点?
data_l = ['data', 18.8, 18.9, 0.0]
答案 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)
答案 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]