我有一个打开txt文件的列表。该列表是一个2D列表,如下所示:
[['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
我希望子列表不是字符串而是整数(当列表中的位置不均匀时)和浮点数(当位置在列表中时均匀)。例如,我希望列表看起来像:
[[25.0, 1, 100.5, 2, 300.0], [50.0, 3, 125.5, 4, 85.0]]
到目前为止,我已经尝试了
list = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
for x in list:
str_to_num = x.split()
这就是我不知道如何分隔哪个元素将成为一个浮点数,哪个元素将成为一个整数。
答案 0 :(得分:1)
Canceled
这会将所有数字转换为浮点数。当然,假设您只有一个字符串,每个列表都有数字。
祝你好运。答案 1 :(得分:0)
你的问题是你的x.split()试图拆分列表而不是字符串(注意['25 1 100.5 2 300']是一个包含一个元素的列表,这是字符串'25 1 100.5 2 300')。如果子列表总是只有一个这样的字符串,则可以使用x [0] .split()来修复代码。
这是一个综合的纠正编辑,假设你想要一个int,当你可以得到它或浮动:
def to_number(num_str):
try:
return_value = int(num_str)
except ValueError:
return_value = float(num_str)
return return_value
old_list = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
new_list = []
for x in old_list:
num_strs = x[0].split()
new_list.append([to_number(_) for _ in num_strs])
答案 2 :(得分:0)
你想要一个单行吗?
In [27]: ll = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
In [28]: [[(int(x) if i%2 else float(x)) for i,x in
enumerate(l[0].split())] for l in ll]
Out[28]: [[25.0, 1, 100.5, 2, 300.0], [50.0, 3, 125.5, 4, 85.0]]
如果您对int / float的区别不挑剔,可以这样做:
In [32]: [[float(x) for x in l[0].split()] for l in ll]
Out[32]: [[25.0, 1.0, 100.5, 2.0, 300.0], [50.0, 3.0, 125.5, 4.0, 85.0]]
对于许多数值运算,值是浮点1.0
还是整数1
并不重要。
区分int和浮点数的另一种方法是int(astr)
引发错误(int('1')
v int('1.23')
)
要使用它我必须定义一个小函数:
In [44]: def foo(astr):
try:
return int(astr)
except ValueError:
return float(astr)
....:
In [45]: [[foo(x) for x in l[0].split()] for l in ll]
Out[45]: [[25, 1, 100.5, 2, 300], [50, 3, 125.5, 4, 85]]
在这种情况下,只有中间字符串显示为浮点数。