【问题标题】:Comparing the lengths of lists with list comprehension Python将列表的长度与列表理解 Python 进行比较
【发布时间】:2021-10-01 01:21:36
【问题描述】:

我正在尝试编写一个列表理解函数来检查嵌套列表函数storage..storage4 中每个列表的长度storage..storage4 以查看所有列表值的长度是否大于 0。如果满足则返回一个布尔值.所以在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 

【问题讨论】:

    标签: python-3.x list for-loop boolean list-comprehension


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回答不敢相信我忘记退货了,非常感谢。
    • 你甚至不需要那么多代码。由于空列表将是False-y,您可以只写def checking(list_val): return all(list_val)。此外,allany 函数本身将立即跳出循环(在 all 的情况下找到单个 False 值的情况下,在找到单个 True 的情况下值与any) 所以这个方法和手动循环列表一样快。
    【解决方案2】:

    首先,它给出“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,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))
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2020-07-10
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多