在此示例中,Python if和isinstance如何工作?

时间:2019-12-28 22:38:48

标签: python

我是一个相对的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])

非常感谢您提前提供的帮助!

3 个答案:

答案 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([])给出Falsebool([1])给出True,这就是为什么您可以缩短空度条件的原因,它们是等效的:

    • if len(sublist) > 0
    • if sublist