Python 将字符串列表转换为浮点列表并获取所有值的总和

Python 将字符串列表转换为浮点列表并获取所有值的总和,python,Python,我在Python3中有以下列表 ['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n'] 如何从每个条目的结尾删除\n?如何将列表转换为 [12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0] ? 我需要一种方法将每个数字转换成一个浮点数,然后将它们相加得到一个和。这是我目前的代码: def calc_su

我在Python3中有以下列表

['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n']
如何从每个条目的结尾删除\n?如何将列表转换为

[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0]
?

我需要一种方法将每个数字转换成一个浮点数,然后将它们相加得到一个和。这是我目前的代码:

def calc_sum(filename):
    new_list = []
    try:
        file = open(filename)
    except:
        print("oops")
        return None
    line = file.readlines()
    print(line)

strip
方法将删除尾随字符,
split
方法将在空格处拆分每行。然后使用
float
将每个块从字符串转换为float,并使用
sum
获得一个和。迭代行,求行的部分和,就完成了

def calc_sum(filename)
    result = 0.0

    with open(filename) as stream:
        for line in stream:
            values = line.strip("\n").split(" ")
            result += sum(float(x) for x in values)

    return result

转换为浮动列表:

>>> a = ['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n']    
>>> k = [float(y) for lst in (x.split() for x in a) for y in lst]
>>> k
[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0]
求和:

>>> sum(k)
2522.12
一网打尽:

>>> sum(float(y) for lst in (x.split() for x in a) for y in lst)
2522.12
说明

要了解发生了什么,下面是不使用列表/生成器理解的等效代码:

k = []
for x in a:
    x = x.split()
    k.append(x)
k
现在是
['12','32.12','453'],['54','123','65'],['12','32'],['12','32','54','765','876']
。我们已经去掉了换行符,并且有一个列表列表,每个内部列表包含字符串(可以转换为浮点数)。接下来,我们将列表展平:

m = []
for sublist in k:
    for x in sublist:
        m.append(x)     
m
['12','32.12','453','54','123','65','12','32','32','54','765','876']
。最后,我们将所有字符串值转换为浮点数:

k = []
for x in m:
    k.append(float(x))

k
[12.0,32.12,453.0,54.0,123.0,65.0,12.0,32.0,12.0,32.0,54.0,765.0,876.0]
求和(k)
将生成所有元素的和。

尝试使用
映射图

>>> x = ['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n']
>>> map(float, ''.join(x).split())
[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0]
>>> 
使用
s.split()。使用例如
float('12')
将字符串转换为float。