计算元组python中元素的平均值

计算元组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和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(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)))