我是python新手,正在尝试完成一个练习,其中我将打印列表中的每个变量,包括任何嵌套列表
我的问题是我无法通过if语句将嵌套列表识别为列表
当我运行type(I)时,它返回它是一个列表,但是当我运行if type(i) is list
或if type(i) == list
时,它无法执行
当我尝试使用if isinstance(type(i), list)
时,我得到一个TypeError:isinstance() arg 2 must be a class, type, or tuple of classes and types.
当我尝试isinstance(type(i),collections.Sequence)
时,嵌套列表也无法识别为列表
如果有人有任何建议,我们将不胜感激。我正在使用Python2.6,因为我正在学习麻省理工学院的课程
谢谢
# -*- 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)
有许多方法可以测试列表。试图同时使用所有这些工具确实令人困惑,而且没有必要,尤其是在这样的论坛上提问。我建议使用
isinstance
。您只需要针对对象本身进行测试,而不是使用isinstance
获取对象的type()
如果您使用该测试或其中一种替代方法,那么代码的结构可以正常工作,并且在运行过程中正好得到两个列表。您的输入数据没有很好地演示递归,但是如果您添加更多级别的嵌入式列表,代码将处理它。下面是一个非常简化的代码版本,它表明使用
isinstance
确实有效:结果:
type(i) == list1
和type(i) is list
也会起作用。就挑一个吧。这段代码将与Python2和Python3一起使用。我同意@Wombatz-使用python3的最新版本相关问题 更多 >
编程相关推荐