比较列表的长度和列表理解 Python
Comparing the lengths of lists with list comprehension Python
我正在尝试编写一个列表理解函数来检查嵌套列表函数 storage..storage4
中每个列表 val..val6
的长度,以查看是否所有列表值的长度都大于 0。然后returns 如果满足则为 bool 值。所以在 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,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。
我正在尝试编写一个列表理解函数来检查嵌套列表函数 storage..storage4
中每个列表 val..val6
的长度,以查看是否所有列表值的长度都大于 0。然后returns 如果满足则为 bool 值。所以在 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,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。