有没有办法忽略列表中的值,在迭代脚本中创建除以零而不是删除那些问题值?
我在想如果
if(x==0):
break
elif(x!=0):
continue
不为零的值将继续通过脚本。
有没有办法忽略列表中的值,在迭代脚本中创建除以零而不是删除那些问题值?
我在想如果
if(x==0):
break
elif(x!=0):
continue
不为零的值将继续通过脚本。
您可以使用列表推导来获得更高效的代码,
from __future__ import division
num = [1,2,3,4,5,6,3,31,1,0,120,0,0]
divisor = 10
print [divisor/x for x in num if x != 0]
输出:
[10.0, 5.0, 3.3333333333333335, 2.5, 2.0, 1.6666666666666667, 3.3333333333333335, 0.3225806451612903, 10.0, 0.08333333333333333]
当然。你可以做你所做的创建一个如果这个,那么那个。或者您甚至可以设置一个 try/except 循环并捕获除以零异常。
一个简单的例子 -
>>> d = [1,0,3,4,5,6,0]
>>> for x in d:
... if x == 0:
... continue # skip this number since it will error.
... print (5 / x)
...
5
1
1
1
0
如果您要对数组进行大量算术运算,您可能需要考虑使用numpy
. 除了更容易使用而且通常更快,它也更灵活。
例如:
>>> divisors = np.array([1,2,3,4,5,6,3,31,1,0,120,0,0])
>>> fractions = 10. / divisors
>>> fractions
array([ 10. , 5. , 3.33333333, 2.5 ,
2. , 1.66666667, 3.33333333, 0.32258065,
10. , inf, 0.08333333, inf, inf])
相比于:
>>> fractions = []
>>> for divisor in divisors:
... if divisor == 0:
... fractions.append(float('inf'))
... else:
... fractions.append(10. / divisor)
甚至:
>>> fractions = [10. / divisor if divisor else float('inf')
... for divisor in divisors]
numpy
并不总是答案,但值得一看。
最好的方法应该是使用异常处理来显示错误消息。
try:
foo_with_possible_division_by_zero()
except ZeroDivisionError:
print "Warning: NaN encountered!"
如果您不想要消息,只需将 print 语句替换为pass
我认为忽略零除法的最简单方法可以通过简单地在除数上添加一个小数来完成。
例如。如果 g = 0 并且您想计算 g/g。你可以这样解决:
g/(g+0.0000001) 最好的一点是你的计算在代数上类似于 0/0 = 0