遍历列表中的列表时如何跳过空列表?

How to skip empty lists when iterating over lists within a list?

以如下代码为例:

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 的列表中的空列表?

简单:

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

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

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

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

此外,您可以使用 enumerate 函数,而不是单独使用 n,returns 当前元素以及索引 -

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

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

# 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

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

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