Python 2.6:如果变量是一个列表,尝试运行if语句。

35 浏览
0 Comments

Python 2.6:如果变量是一个列表,尝试运行if语句。

这个问题已经有了答案:

Python中检查类型的规范方法是什么?

我是Python的新手,试图完成一个练习,从一个列表中打印出每个变量,包括任何嵌套的列表。

我的问题是,我无法通过if语句将嵌套的列表识别为列表。

当我运行type(i)时,它返回它是一个列表,但是当我运行if type(i) is listif type(i) == list时,它无法执行。

当我尝试使用if isinstance(type(i), list)时,我得到一个TypeError: isinstance() arg 2必须是类、类型或类和类型的元组。

当我尝试isinstance(type(i),collections.Sequence)时,嵌套的列表也无法被识别为列表。

如果有人有任何建议,将不胜感激。我正在使用Python 2.6,因为我正在跟随MIT课程。

谢谢!

# -*- coding: cp1252 -*-
import collections
listval= ["war",1,["brie","rocky","roq le coq"],[1,2,3]]
def printlist2(lists):
    for i in lists:
        print("Variable value: ", type(i))
        print ("Is variable a list: ",isinstance(type(i),collections.Sequence))
        #print (isinstance(type(i),list))
        if isinstance(type(i),collections.Sequence):
            print ("This is a list")
            printlist2(i)
        elif type(i) == list:
            print ("This is a list")
        elif type(i) is int:
            #print ("String length is equal to ",len(str(i)))
            print ("i is equal to integer ",i)
        else:
            #print ("String length is equal to ",len(i))
            print ("i is equal to string ",i) 
printlist2(listval)

admin 更改状态以发布 2023年5月22日
0
0 Comments

有多种方法可以测试列表。尝试同时使用所有这些方法非常混乱和不必要,特别是在像这样的论坛中提问。我建议使用isinstance。您只需要针对对象本身进行测试,而不是使用type()isinstance对其进行测试。

如果您使用该测试或其中一种替代方法,则代码的结构运行良好,您将在运行期间准确地指出2个列表。您的输入数据并没有很好地展示递归,但是如果您添加更多嵌套列表的级别,则该代码将处理它。这是您的代码的大大简化版本,显示使用isinstance确实起作用:

# -*- coding: cp1252 -*-
listval= ["war",1,["brie","rocky","roq le coq"],[1,2,3]]
def printlist2(lists):
    for i in lists:
        if isinstance(i, list):
            print ("This is a list: " + str(i))
            printlist2(i)
        else:
            print ("This is not a list: " + str(i))
printlist2(listval)

结果:

This is not a list: war
This is not a list: 1
This is a list: ['brie', 'rocky', 'roq le coq']
This is not a list: brie
This is not a list: rocky
This is not a list: roq le coq
This is a list: [1, 2, 3]
This is not a list: 1
This is not a list: 2
This is not a list: 3

type(i) == list1type(i) is list也可以使用。只需选择一个。此代码将适用于Python 2和Python 3。我同意@Wombatz-使用最新版本的Python 3。

0