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

时间:2018-01-15 09:00:59

标签: python

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', '')

我想从a和b中排除第一个元素Ave B,并计算a和b元组中值的平均值。我试图编写这样的代码:

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'

如何解决此错误或如何找到平均值?

5 个答案:

答案 0 :(得分:1)

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)

<强>结果:

1026.4
0.587

答案 1 :(得分:0)

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))

问题是列表中的值仍然是字符串。要从字符串转换为数字,您需要使用float()

答案 2 :(得分:0)

对不受支持的数据类型执行操作时会产生TypeError

Python Docs link for TypeError

在此特定情况下,TypeError被引发,因为您尝试在两个不同的数据类型StringInt/Float上执行添加而未将其明确转换为正确的数据类型。

def average(values):
     total = 0
     for element in values:
         if not element.isalpha() and element:
             total+=float(element)

     return total/len(values)

结果

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

如果我们只对数字而不是字符串进行平均,则函数将更改为

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

答案 3 :(得分:0)

你在这里遇到错误,因为你试图在这里添加int和string类型元素:

sum是值为0的int类型元素

和 值中的元素是字符串类型。

只需替换:

sum+=i

使用:

sum+=float(i)

答案 4 :(得分:0)

还有一个变种:

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)))