【问题标题】:List comprehension or more efficient method for this code此代码的列表理解或更有效的方法
【发布时间】:2014-10-16 10:19:32
【问题描述】:

我有以下代码。对于a 内包含项目的范围 1、4 内的所有列表,将它们的长度/项目数相加,然后打印。

a = [[1, 2, 3], None, [1.23, 4.56], ['a', 'b', 'c'], None, None] 
sum = 0

for i in a[1, 4):
    if a[i]:
        sum += len(i)

print(sum)

如何简化中间三行代码以提高流程效率?我可以通过列表理解来做到这一点吗?

【问题讨论】:

    标签: python list iteration list-comprehension


    【解决方案1】:

    是的,您可以使用生成器表达式来实现。这是一个与列表推导式语法相似的结构。

    a = [[1, 2, 3], None, [1.23, 4.56], ['a', 'b', 'c'], None, None] 
    sum_ = sum(len(L) for L in a if L is not None)
    print(sum_)
    

    在这种情况下,您实际上不需要任何结果列表,因此您通常不会在这里使用列表推导。

    【讨论】:

      【解决方案2】:
      s = sum(len(i) for i in a if i)
      

      【讨论】:

        【解决方案3】:
        sum([len(element) for element in a if element])
        

        这个应该可以了~

        【讨论】:

        • 当您所做的只是对值求和时,无需在此处构建列表。
        【解决方案4】:

        你可以使用isinstance来检查子元素是否是一个列表,所以如果你的列表包含None以外的值,它仍然可以工作。

         sum(len(x) for x in a[1:5] if isinstance(x,list))
        

        a[1:5] 是元素 None, [1.23, 4.56], ['a', 'b', 'c'], None1 - 4

        如果您希望前四个元素的索引从0 开始,那么请使用a[0:4],其中包括开始索引0 和最多但不包括索引4

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-10
          • 2023-04-04
          • 1970-01-01
          • 2016-10-13
          相关资源
          最近更新 更多