假设我们有两个列表:
A = [2, 3, [6, 7], 0]
B = [4, 7, 10, 2]
我想将这些值输入到这样的函数中:
def gettype(self, a):
for x in a:
if isinstance(x, list):
ident = True
else:
ident = False
return ident
如果有列表列表则返回True,否则返回false。
ident = gettype(A)
print ident
True
ident = gettype(B)
print ident
False
PS:上面的那个函数不起作用,它在两种情况下都返回False
答案 0 :(得分:10)
像
A = [2, 3, [6, 7], 0]
B = [4, 7, 10, 2]
def has_lists(lst):
return any(isinstance(x, list) for x in lst)
print has_lists(A) # True
print has_lists(B) # False
答案 1 :(得分:4)
问题是您为列表的每个成员更改了ident
的值。所以实际上如果列表的最后一个元素是一个列表,你只会得到True。
试试这个。如果列表中有列表,则返回True。如果在未遇到列表的情况下到达列表末尾,则返回False。
def gettype(self, a):
for x in a:
if isinstance(x, list):
return True
return False
答案 2 :(得分:1)
您正在迭代列表的所有元素。问题是您要覆盖ident
的值,并且列表的最后一个值是integer
,函数返回False
。
当您发现True
元素的第一个案例时,您必须返回list
,就像其他答案中的其他实现一样。
答案 3 :(得分:1)
您的代码的问题是您在每次迭代时更新ident
,A
中的最后一个值不是列表,因此False
结果。这是你可能想要的:
def gettype(self, a):
for x in a:
if isinstance(x, list):
return True
return False
请注意,return True
语句会立即突破for
循环,并在遇到列表元素时立即终止算法。