Python 2.6:尝试 运行 如果变量是一个列表的 if 语句
Python 2.6:Trying to run an if statement if variable is a list
我是 python 的新手,正在尝试完成一个练习,打印列表中的每个变量,包括任何嵌套列表。
我的问题是我无法通过 if 语句将嵌套列表识别为列表。
当我 运行 键入(i) 它 returns 它是一个列表但是当我 运行 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)
时,嵌套列表也未被识别为列表。
如果有人有任何建议,我们将不胜感激。我正在使用 Python 2.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()
如果您使用该测试或其中一种替代方法,您的代码结构可以正常工作,并且您会在 运行 期间准确指出 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) == list1
和 type(i) is list
也可以。随便选一个。此代码适用于 Python 2 和 Python 3。我同意@Wombatz - 使用最新版本的 Python 3.
我是 python 的新手,正在尝试完成一个练习,打印列表中的每个变量,包括任何嵌套列表。
我的问题是我无法通过 if 语句将嵌套列表识别为列表。
当我 运行 键入(i) 它 returns 它是一个列表但是当我 运行 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)
时,嵌套列表也未被识别为列表。
如果有人有任何建议,我们将不胜感激。我正在使用 Python 2.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()
如果您使用该测试或其中一种替代方法,您的代码结构可以正常工作,并且您会在 运行 期间准确指出 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) == list1
和 type(i) is list
也可以。随便选一个。此代码适用于 Python 2 和 Python 3。我同意@Wombatz - 使用最新版本的 Python 3.