2017-08-16 27 views
0
A = 0 
B = 10 
C = 20 
N = [(A, B, C)] 

Avarage = (A + B + C)/sum(1 for i in N if i != 0) 

Avarage = 30?Python - 使变量变量无0

Need Avarage = 15.

有什么想法吗?

+1

'N'是含有1元组所以'因为我在N'列表...我会'(0 ,10,20)'和!= 0 ....让你30/1 – depperm

回答

3

你需要从你的列表N

a = 0 
b = 10 
c = 20 
n = [a, b, c] 

list_avg = sum(n)/sum(1 for i in n if i != 0) 

输出删除()

>>> list_avg 
15 
0

正如depperm所述,N是一个元组的列表,所以你只有一个元素(它不是0,因为它是一个元组而不是一个int)。否则,你可以使用numpy的

import numpy as np 
average = np.mean([A, B, C]) 
1

N中包含列表元组。所以sum(1 for i in N if i != 0)返回1因为只有1名单N.元素(一个元组)

尝试:

A = 0 
B = 10 
C = 20 
N = [(A, B, C)] 

Avarage = (A + B + C)/sum(1 for i in N[0] if i != 0) 
print Avarage 

OR:

A = 0 
B = 10 
C = 20 
N = [A, B, C] 

Avarage = (A + B + C)/sum(1 for i in N if i != 0) 
print Avarage 
+0

是的,现在明白!谢谢 – leandurus

0

制作值的一个新的列表没有零,则平均是:

non_zero = [v for v in (A, B, C) if v != 0] 
avg = sum(non_zero)/len(non_zero)