如何将列表的第一个值更改为浮点数

时间:2018-05-08 18:43:19

标签: python string python-3.x list

def read_data(filename):
    answer = []
    in_file = open(filename)
    lines = in_file.readlines()
    lines = [line.strip() for line in lines]
    for line in lines:
        answer.append(line.split(","))
    return answer

 ANSWER --> [['Angus McGurkinshaw', '25'], ['Thomas Albert Finkelstein III', '75'], ['Myrtle', '50']]

我无法弄清楚如何将列表中每个对象的数量更改为浮点数,任何人都可以指向正确的方向。

谢谢!

3 个答案:

答案 0 :(得分:2)

将您的代码更改为

for line in lines:
    name,val = line.split(",")
    answer.append([name,float(val)])

如果你确定你得到了2个元素,那么第2个元素可以浮动转换。

如果要修改结果列表:您可以创建一个tryFloat(string)方法,该方法需要string,如果它可以浮动则返回float,否则返回字符串:

def tryFloat(t:str):
    """Tries to convert t to float and returns it, returns t if not a float."""
    try:
        f = float(t)
        return f
    except (ValueError,EOFError):
        return t

data =  [['Angus McGurkinshaw', '25'], ['Thomas Albert Finkelstein III', '75'], ['Myrtle', '50']]

data2 = [ [tryFloat(f) for f in y] for y in data]

print(data2)

并将其应用于您的列表列表。如果您确定第二件事是浮点数,请使用其他建议的方法之一。只要您只有字符串列表列表,tryFloat()就可以在arbritary位置使用浮点数。

输出:

[['Angus McGurkinshaw', 25.0], ['Thomas Albert Finkelstein III', 75.0], ['Myrtle', 50.0]]

答案 1 :(得分:1)

row = line.split(",")
row[1] = float(row[1])
answer.append(row)

答案 2 :(得分:1)

迭代您的answer列表。对于每个条目,调用float()构造函数。

for line in answer:
    line[1] = float(line[1])