知道是否有列表列表 - Python

时间:2012-06-03 17:39:48

标签: python list

假设我们有两个列表:

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

4 个答案:

答案 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)

您的代码的问题是您在每次迭代时更新identA中的最后一个值不是列表,因此False结果。这是你可能想要的:

def gettype(self, a):
    for x in a:
        if isinstance(x, list):
            return True
    return False

请注意,return True语句会立即突破for循环,并在遇到列表元素时立即终止算法。