现在,在我的代码中有两个列表:aboveAdj1
和 aboveAdj2
,它们要么包含 1 和 0,要么为空:
if len(aboveAdj1) and len(aboveAdj2):
perAboveFix = 100*int(sum(aboveAdj1) + sum(aboveAdj2))/int(len(aboveAdj1) + len(aboveAdj2))
如果 aboveAdj1
和 aboveAdj2
都不为空或全为零,那么我想计算比率。如果另一个变量为空,是否有一种仅基于一个变量计算比率的高效/简短方法,而无需编写一堆 if
语句?
例如,如果aboveAdj1
为空或全为零,则计算:
perAboveFix = 100*int(sum(aboveAdj2))/int(len(aboveAdj2))
反之亦然。
最佳答案
基本上你想检查是否:
- 列表不为空
- 并且它们至少包含一个不为零的值。
any()
函数只是为您做这件事,因为如果列表不为空,则 any(some_list)
为 True
并且包含至少一个非零值。
因此,如果您只想在两个列表都有效时计算比率,您可以这样做:
if any(aboveAdj1) and any(aboveAdj2):
perAboveFix = 100 * (sum(aboveAdj1) + sum(aboveAdj2)) / (len(aboveAdj1) + len(aboveAdj2))
否则,如果你想在至少一个列表有效时计算它,那么你可以这样做:
if any(aboveAdj1 + aboveAdj2):
perAboveFix = 100 * (sum(aboveAdj1) + sum(aboveAdj2)) / (len(aboveAdj1) + len(aboveAdj2))
另请注意,您不需要使用 int()
函数,因为正如您所说,您的列表仅包含 0
s 和 1
s,以及 len()
已经返回整数值。
关于python - 检查列表是否为空或仅包含零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026803/