我是一个相对的Python新手(因此很抱歉这是一个愚蠢的问题)-我需要浏览下面的元素列表,如果是整数则打印每个列表的第一个元素-我必须承认我可以不能完全理解解决方案#1不起作用以及为什么解决方案#2可以起作用:
elements = [
[1, 4, 6, 7],
[4, 5, 6],
[6, 7, 8],
[],
["nodata", "nodata"],
[1, 3]
]
解决方案1:
for i in elements:
if isinstance(i[0], int): # check if first element of each list is an int
print(i[0])
(我得到一个超出范围的列表索引错误,但不确定为什么-是因为列表之一为空吗?-似乎是这样,因为它可行:
for i in elements:
if len(i) > 0 and isinstance(i[0], int):
print(i[0])
解决方案2:
for i in elements:
if i and isinstance(i[0], int): # what does 'if i and ....' mean here?? does it mean 'if i is not empty' and???
print(i[0])
非常感谢您提前提供的帮助!
答案 0 :(得分:1)
我得到一个超出范围的列表索引错误,但不确定为什么-是因为列表之一为空? -在这种情况下似乎是这样:
是的,当您执行for i in elements
时,i
将采用elements
中每个值的值。在您的示例中,第4个条目为空列表,因此i[0]
的索引错误
“如果我和...。”在这里是什么意思?
在python中,如果列表不为空,if some_list
将返回True
答案 1 :(得分:1)
第一个解决方案以错误结尾,因为i[0]
不一定存在。
第二种解决方案之所以有效,是因为它通过i[0]
的意思是if i
来检查if bool(i == True)
是否存在。
答案 2 :(得分:-1)
首先,您应该对变量for sublist in elements:
使用合理的名称
然后,使用sublist[0]
访问一个空列表将引发错误,因为0
中没有框,len(sublist) > 0
对其进行了修复
bool([])
给出False
和bool([1])
给出True
,这就是为什么您可以缩短空度条件的原因,它们是等效的:
if len(sublist) > 0
if sublist