Python re.findall float return 无法对 returned 值求和
Python re.findall float return unable to sum returned values
我正在使用 re.findall 来 return 来自文件中特定行的浮点数:
mealReturnValue = re.findall("\d+\.\d+",lines[2])
它从中提取的示例文件行:"The total bill was 400.00 "
这将 return 数字列表如下:
[['400.00'], ['210.0'], ['400.00']]
然后我尝试对列表求和,但是,它抛出以下错误:
Traceback (most recent call last):
File "TotalSpend.py", line 25, in <module>
totalSpend = sum(mealReturn)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
这似乎是 re.findall 的函数,因为我已经能够通过生成相同数字的数组来手动执行此操作。
例如:
i = [400.00, 210.0, 400.00]
print sum(i)
所以我不知道这里真正的问题是什么,我似乎无法将 re.findall 转换为我可以在列表中使用的浮点数。
如有任何帮助,我们将不胜感激。
为了更加清楚整个代码文件:
import os
import sys
import re
dirListing = os.listdir('C:\Users\joshnathan\Desktop\LPTHW')
mealReturn =[] # Array of returned meal values
numberOfMeals = 0
print "Which meal do you want to calculate?"
meal = raw_input(">>")
for item in dirListing:
if meal in item:
numberOfMeals += 1
fileName = open(item, 'r')
lines = fileName.readlines()
mealReturnValue = re.findall('\d+\.\d+',lines[2])
mealReturn.append(mealReturnValue)
print mealReturn
print numberOfMeals
totalSpend = sum(mealReturn)
print totalSpend
谢谢
约书亚
试试这个。
In [1]: sum([float(i[0]) for i in a])
Out[1]: 1010.0
考虑 a
作为你的结果。您正在尝试对列表的列表执行 sum
操作。它是字符串格式。您需要转换为 float
并将其作为单个列表。然后就可以执行sum
操作了。
步骤
1。将其设为单个列表
In [2]: [i[0] for i in a]
Out[2]: ['400.00', '210.0', '400.00']
2。将所有元素转换为 float
In [3]: [float(i[0]) for i in a]
Out[3]: [400.0, 210.0, 400.0]
3。执行求和运算。
In [4]: sum([float(i[0]) for i in a])
Out[4]: 1010.0
编辑
mealReturnValue = re.findall('\d+\.\d+',lines[2])
会 return 像这样 [['400.00']]
所以你可以像这样 mealReturnValue = float(re.findall('\d+\.\d+',lines[2])[0])
把它转换成 float 本身。而不是 append
成一个字符串,你可以添加一个变量。 mealReturnValue += re.findall('\d+\.\d+',lines[2])
。要像这样使用你必须声明 mealReturnValue
。像这样mealReturnValue = 0
像这样更改您的代码
totalSpend = 0
for item in dirListing:
if meal in item:
numberOfMeals += 1
fileName = open(item, 'r')
lines = fileName.readlines()
totalSpend += float(re.findall('\d+\.\d+',lines[2])[0])
print numberOfMeals
print totalSpend
您正在尝试对字符串列表的列表求和。
求和时,应将值求和为浮点数:
sum(float(num[0]) for num in mealReturnValue)
>> 1010.0
我正在使用 re.findall 来 return 来自文件中特定行的浮点数:
mealReturnValue = re.findall("\d+\.\d+",lines[2])
它从中提取的示例文件行:"The total bill was 400.00 "
这将 return 数字列表如下:
[['400.00'], ['210.0'], ['400.00']]
然后我尝试对列表求和,但是,它抛出以下错误:
Traceback (most recent call last):
File "TotalSpend.py", line 25, in <module>
totalSpend = sum(mealReturn)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
这似乎是 re.findall 的函数,因为我已经能够通过生成相同数字的数组来手动执行此操作。
例如:
i = [400.00, 210.0, 400.00]
print sum(i)
所以我不知道这里真正的问题是什么,我似乎无法将 re.findall 转换为我可以在列表中使用的浮点数。
如有任何帮助,我们将不胜感激。
为了更加清楚整个代码文件:
import os
import sys
import re
dirListing = os.listdir('C:\Users\joshnathan\Desktop\LPTHW')
mealReturn =[] # Array of returned meal values
numberOfMeals = 0
print "Which meal do you want to calculate?"
meal = raw_input(">>")
for item in dirListing:
if meal in item:
numberOfMeals += 1
fileName = open(item, 'r')
lines = fileName.readlines()
mealReturnValue = re.findall('\d+\.\d+',lines[2])
mealReturn.append(mealReturnValue)
print mealReturn
print numberOfMeals
totalSpend = sum(mealReturn)
print totalSpend
谢谢 约书亚
试试这个。
In [1]: sum([float(i[0]) for i in a])
Out[1]: 1010.0
考虑 a
作为你的结果。您正在尝试对列表的列表执行 sum
操作。它是字符串格式。您需要转换为 float
并将其作为单个列表。然后就可以执行sum
操作了。
步骤
1。将其设为单个列表
In [2]: [i[0] for i in a]
Out[2]: ['400.00', '210.0', '400.00']
2。将所有元素转换为 float
In [3]: [float(i[0]) for i in a]
Out[3]: [400.0, 210.0, 400.0]
3。执行求和运算。
In [4]: sum([float(i[0]) for i in a])
Out[4]: 1010.0
编辑
mealReturnValue = re.findall('\d+\.\d+',lines[2])
会 return 像这样 [['400.00']]
所以你可以像这样 mealReturnValue = float(re.findall('\d+\.\d+',lines[2])[0])
把它转换成 float 本身。而不是 append
成一个字符串,你可以添加一个变量。 mealReturnValue += re.findall('\d+\.\d+',lines[2])
。要像这样使用你必须声明 mealReturnValue
。像这样mealReturnValue = 0
像这样更改您的代码
totalSpend = 0
for item in dirListing:
if meal in item:
numberOfMeals += 1
fileName = open(item, 'r')
lines = fileName.readlines()
totalSpend += float(re.findall('\d+\.\d+',lines[2])[0])
print numberOfMeals
print totalSpend
您正在尝试对字符串列表的列表求和。
求和时,应将值求和为浮点数:
sum(float(num[0]) for num in mealReturnValue)
>> 1010.0