比较列表的长度与列表理解 Python

问题描述

我正在尝试编写一个列表理解函数,该函数检查嵌套列表函数 val..val6 中每个列表 storage..storage4 的长度,以查看是否所有列表值的长度都大于 0。然后返回一个如果满足则为布尔值。因此,在 storage 中,val2 的长度大于 0,除 val 之外的所有其他列表也是如此,因为并非 storage 中的所有列表的长度都大于 0它将输出 Falsestorage4 满足所有列表长度都大于 0 的条件,因此输出 True。我如何才能修改代码以获得预期的输出

val = []
val2 = [12,456,786,9]
val3 = [556]
val4 = [66,7,4,3,12]
val5 = [99,88,6]
val6 = [12,4567]

storage = [val,val2,val3]
storage2 = [val,val3,val4,val5,val6]
storage3 = [val,val6]
storage4 = [val2,val6]

def checking(list_val):
  newlist = [True for x in list_val if len(x) > 0]

print(checking(storage))
print(checking(storage2))
print(checking(storage3))
print(checking(storage4))

输出

None
None
None
None

预期输出

False
False 
False 
True 

解决方法

首先,它给出“None”的原因是因为您需要在函数中使用 return 语句,目前该函数不返回任何内容。

这是一个有效的实现,虽然它不使用列表理解,因为它们更多地用于创建新列表而不是单个输出:

val = []
val2 = [12,456,786,9]
val3 = [556]
val4 = [66,7,4,3,12]
val5 = [99,88,6]
val6 = [12,4567]

storage = [val,val2,val3]
storage2 = [val,val3,val4,val5,val6]
storage3 = [val,val6]
storage4 = [val2,val6]

def checking(list_val):
  for x in list_val:
      if len(x) == 0:
          return False
  return True

print(checking(storage))
print(checking(storage2))
print(checking(storage3))
print(checking(storage4))

这里检查每个元素,如果元素的长度为零,则停止并返回False,否则一旦检查完所有内容,最终返回True。

,

你得到 None 的原因是你的函数没有返回任何东西。即使您返回 newlist,它仍然不起作用,因为 newlist 是一个包含 True 值或空值的列表。

这可以在 all() 和生成器表达式的帮助下完成,如下所示 -

def checking(list_val):
  return all(len(x) > 0 for x in list_val)

这里生成器表达式将遍历 list_val 中的所有元素并检查元素的长度是否大于 0。all() 将检查生成器生成的所有元素是否为 True。

另一种方法是@Lumorti 提到的,是循环并检查是否有任何子列表长度为 0 并立即返回。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...