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'
如何解决此错误或如何找到平均值?
答案 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
被引发,因为您尝试在两个不同的数据类型String
和Int/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)))