Python 将字符串列表转换为浮点列表并获取所有值的总和
我在Python3中有以下列表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
['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。