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

Comparing the lengths of lists with list comprehension Python

我正在尝试编写一个列表理解函数来检查嵌套列表函数 storage..storage4 中每个列表 val..val6 的长度,以查看是否所有列表值的长度都大于 0。然后returns 如果满足则为 bool 值。所以在 storageval2 的长度大于 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,val2,val3,val4,val5,val6]
storage3 = [val,val2,val4,val6]
storage4 = [val2,val5,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 语句,目前该函数没有 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,val2,val3,val4,val5,val6]
storage3 = [val,val2,val4,val6]
storage4 = [val2,val5,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))

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

你得到 None 的原因是你的函数没有 return 任何东西。即使您 return newlist,它仍然无法工作,因为 newlist 是一个包含真值或空值的列表。

这可以在 all() 和生成器表达式 -

的帮助下像下面那样完成
def checking(list_val):
  return all(len(x) > 0 for x in list_val)

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

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