python - 检查列表是否为空或仅包含零

标签 python arrays performance list if-statement

现在,在我的代码中有两个列表:aboveAdj1aboveAdj2,它们要么包含 1 和 0,要么为空:

if len(aboveAdj1) and len(aboveAdj2):
    perAboveFix = 100*int(sum(aboveAdj1) + sum(aboveAdj2))/int(len(aboveAdj1) + len(aboveAdj2))

如果 aboveAdj1aboveAdj2 都不为空或全为零,那么我想计算比率。如果另一个变量为空,是否有一种仅基于一个变量计算比率的高效/简短方法,而无需编写一堆 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() 函数,因为正如您所说,您的列表仅包含 0s 和 1s,以及 len() 已经返回整数值。

关于python - 检查列表是否为空或仅包含零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026803/

相关文章:

python - 为什么在python中递归调用同一个函数时要使用return

java - 填充二维数组迷宫时数组越界异常

java - 如何加快素数计算速度?

ruby - 这些 Array Initializations 中的哪个在 Ruby 中更好?

sql - 有没有办法对 SqlDataReader 进行多线程处理?

python - 如何从具有默认值的字符串列表中解析(可能未知的)键/值对?

Python - 对嵌套列表的列表进行排序

python - 无法在 Django 中包含来 self 的应用程序的网址

java - 如何使我的代码从菜单代码中的一个空白变为另一个空白,并使其随机生成输入?

Java 到 C++ 的转换