计算元组python中元素的平均值
我想从a和B中排除第一个元素aveb,并计算a和B元组中值的平均值。我试着写一个这样的代码:计算元组python中元素的平均值,python,Python,我想从a和B中排除第一个元素aveb,并计算a和B元组中值的平均值。我试着写一个这样的代码: a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030') b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00', '') 我犯了一些像这样的错误: def avarage(va
a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030')
b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00', '')
我犯了一些像这样的错误:
def avarage(value):
sum=0
value=list(value)
first=value[0]
value.pop(0)
for i in value:
sum+=i
avrg=sum / (len(value))
return avrg
print(avarage(a))
print(avarage(b))
如何解决此错误或如何找到平均值
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
结果:
a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030')
b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00', '')
print sum(map(float, filter(None, a[1:])))/(len(a)-1)
print sum(map(float, filter(None, b[1:])))/(len(b)-1)
问题是列表中的值仍然是字符串。要将字符串转换为数字,需要使用float()在不支持的数据类型上执行操作时会产生
TypeError
结果
在此特定场景中,引发TypeError
,原因是您试图对两种不同的数据类型String
和Int/Float
执行加法,而没有显式地将它们转换为正确的数据类型
a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030')
b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00',)
def avarage(value):
sum=0
value = list(value)
value.pop(0)
for i in value:
sum+=float(i)
avrg = sum / (len(value))
return avrg
print(avarage(a))
print(avarage(b))
结果
如果我们只对数字进行平均,而不是对字符串进行平均,那么函数将更改为
a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030')
b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00',)
average(a)
933.0909090909091
average(b)
0.5336363636363637
结果
此处出现错误,因为您试图在此处添加int和string类型元素: sum是值为0的int类型元素 及 值中的元素是字符串类型 只需替换:
average(a)
1026.4
average(b)
0.6522222222222223
与:
还有一个变化:
sum+=float(i)
哦,那些是弦。这些数据来自哪里?您正在迭代字符串列表,
sum+=int(i)
。此外,如果你愿意,你可以在一个线性平均average=lambda x:sum(map(int,x[1:])/(len(x)-1)
当我编辑代码时,如您所示,我得到了如下错误:sum+=float(I)ValueError:无法将string转换为float@jonathandewet从列表B中删除最后一个元素。它不是一个数字:)抱歉,我忘了提到更改len(values)
也计算排除的字符串。@Piintesky是的,同意,我是这样保存的,因为我不确定OP是否希望这样!谢谢你的帮助。当我编辑代码sum+=float(I)时,我得到了以下错误:ValueError:无法将字符串转换为float@rahulmehra@seyazc我刚刚用上面的替换代码尝试了上面的代码,结果是:1026.4 0.652222[在0.0s内完成]
def average(values):
total = 0
total_values = 0
for element in values:
if not element.isalpha() and element:
total_values+=1
total+=float(element)
return total/total_values
average(a)
1026.4
average(b)
0.6522222222222223
sum+=i
sum+=float(i)
a=('A','1022', '1023', '1024', '1025', '1026', '1027', '1028', '1029', '1030', '1030')
b=('B', '-1.0', '1', '-2.443', '-1.456', '4.00', '3.00', '-2.343', '2.112', '3.00', '')
def average(values):
sum = 0
count = 0
for num in values:
try:
sum += float(num)
count += 1
except: pass
return sum / count
print('%7.2f'%(average(a)))
print('%7.2f'%(average(b)))