我正在学习Python,我遇到了一个问题,所以如果我有这样的东西:
data_l = ['data', '18.8', '17.9', '0.0']
我该怎么做呢?
data_l = ['data', 18.8, 18.9, 0.0]
ws51t4hk1#
你可以创建一个简单的实用函数,如果可能的话,将给定的值转换为浮点数,或者按原样返回:
def maybe_float(s): try: return float(s) except (ValueError, TypeError): return s orig_list = ['data', '18', '17', '0'] the_list = [maybe_float(v) for v in orig_list]
请不要使用内置函数和类型的名称,如list等。作为变量名。由于你的数据实际上具有结构,而不是真正的字符串和数字的混合列表,所以(str, float, float, float)的4元组似乎更合适:
list
(str, float, float, float)
data_conv = (data_l[0], *(float(v) for v in data_l[1:]))
或在较旧的Python版本中
# 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:]])
kse8i1jr2#
你可以使用str.isdigit方法和列表解析:
str.isdigit
list = [int(s) if s.isdigit() else s for s in list]
这里有一个live example
nom7f22z3#
通用方法:
def validate_number(s): try: return float(s) except (ValueError, TypeError): return s data = [validate_number(s) for s in data]
如果结构是固定的:
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将在正整数的情况下工作:
isdigit
data = [int(s) if s.isdigit() else s for s in data]
e0bqpujr4#
上面提到的方法是有效的,但是由于混合列表也可以包含整数值,所以我增加了一个额外的检查。
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]
4条答案
按热度按时间ws51t4hk1#
你可以创建一个简单的实用函数,如果可能的话,将给定的值转换为浮点数,或者按原样返回:
请不要使用内置函数和类型的名称,如
list
等。作为变量名。由于你的数据实际上具有结构,而不是真正的字符串和数字的混合列表,所以
(str, float, float, float)
的4元组似乎更合适:或在较旧的Python版本中
kse8i1jr2#
你可以使用
str.isdigit
方法和列表解析:这里有一个live example
nom7f22z3#
通用方法:
如果结构是固定的:
另一个:
isdigit
将在正整数的情况下工作:e0bqpujr4#
上面提到的方法是有效的,但是由于混合列表也可以包含整数值,所以我增加了一个额外的检查。
输出: