问题描述
我正在尝试编写一个列表理解函数,该函数检查嵌套列表函数 val..val6
中每个列表 storage..storage4
的长度,以查看是否所有列表值的长度都大于 0。然后返回一个如果满足则为布尔值。因此,在 storage
中,val2
的长度大于 0,除 val
之外的所有其他列表也是如此,因为并非 storage
中的所有列表的长度都大于 0它将输出 False
。 storage4
满足所有列表长度都大于 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 并立即返回。