遍历列表中的列表时如何跳过空列表?
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
以如下代码为例:
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