【问题标题】:How to skip empty lists when iterating over lists within a list?迭代列表中的空列表 - python
【发布时间】:2015-09-25 03:43:38
【问题描述】:

以如下代码为例:

a = [['James Dean'],['Marlon Brando'],[],[],['Frank Sinatra']]

n = 0

for i in a:
    print a[n][0]
    n = n + 1

我似乎遇到了索引值错误:

IndexError: list index out of range

如何跳过名为 a 的列表中的空列表?

【问题讨论】:

    标签: python list iteration


    【解决方案1】:

    阅读您的代码,我假设您尝试获取列表中每个非空条目的内部列表的第一个元素,并打印出来。我喜欢这种语法:

    a = [['James Dean'],['Marlon Brando'],[],[],['Frank Sinatra']]
    # this filter is lazy, so even if your list is very big, it will only process it as needed (printed in this case)
    non_empty_a = (x[0] for x in a if x)
    
    for actor in non_empty_a : print (actor)
    

    正如其他答案所述,这是有效的,因为空列表在 if 表达式中被转换为 False

    【讨论】:

      【解决方案2】:

      您可以进行测试,也可以捕获异常。

      # Test
      for i in a:
          if a[n]:
              print a[n][0]
          n = n + 1
      
      # Exception
      for i in a:
          try:
              print a[n][0]
          except IndexError:
              pass
          finally:
              n = n + 1
      

      您甚至可以使用精简的print "\n".join(e[0] for e in a if e),但它的可读性相当差。

      顺便说一句,我建议使用 for i, element in enumerate(a) 而不是手动递增 n

      【讨论】:

        【解决方案3】:

        您可以检查列表是否为空,空列表在布尔上下文中具有False 值-

        for i in a:
            if i:
                print a[n][0]
            n = n + 1
        

        另外,你可以使用enumerate函数,而不是单独使用n,它返回当前元素以及索引-

        for n, i in enumerate(a):
            if i:
                print a[n][0] # though you could just do - print i[0]
        

        【讨论】:

          【解决方案4】:

          简单:

          for i in a:
              if i:
                  print i[0]
          

          此答案有效,因为当您在 if 语句中将列表(如 i)转换为布尔值时,就像我在这里所做的那样,它会评估列表是否为空,,这就是你想要的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-24
            • 1970-01-01
            • 2014-04-26
            相关资源
            最近更新 更多