有没有办法忽略列表中的值,在迭代脚本中创建除零而不是删除那些问题值?
我正在思考如果
if(x==0):
break
elif(x!=0):
continue
通过脚本继续使用非零值。
答案 0 :(得分:6)
您可以使用列表推导来获得更高效的代码,
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]
答案 1 :(得分:2)
当然。你可以做你创建的if if,然后那样做。或者你甚至可以设置一个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
答案 2 :(得分:1)
如果你在数组上做了很多算术运算,你可能要考虑使用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
并不总是答案,但值得一看。
答案 3 :(得分:0)
最好的方法是使用异常处理来显示错误消息。
try:
foo_with_possible_division_by_zero()
except ZeroDivisionError:
print "Warning: NaN encountered!"
如果您不想要消息,只需将打印语句替换为pass
答案 4 :(得分:0)
忽略零分割的最简单方法我认为可以通过简单地向除数添加一个小小数来算术地完成。
例如。 如果g = 0 而你想要计算g / g。你可以这样解决这个问题:
克/(克+ 0.0000001) 关于这一点的最好的事情是你将使你的计算代数行为类似于0/0 = 0