1

假设我们有两个列表:

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

4 回答 4

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
于 2012-06-03T17:44:23.723 回答
4

问题是您更改了ident列表中每个成员的值。所以事实上,如果列表的最后一个元素是一个列表,你只会得到 True 。

试试这个。如果列表中有列表,则返回 True。如果到达列表末尾而没有遇到列表,则返回 False。

def gettype(self, a):
 for x in a:
    if isinstance(x, list):
     return True
  return False
于 2012-06-03T17:41:59.080 回答
1

您正在迭代列表的所有元素。问题是您正在覆盖 的值,ident因为列表的最后一个值是integer函数返回的False

当您像其他答案中的其他实现一样True找到第一个元素案例时,您必须返回。list

于 2012-06-03T17:43:36.110 回答
1

您的代码的问题是您ident在每次迭代时更新,并且最后一个值A不是列表,因此是False结果。以下是您可能想要的:

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

请注意,一旦遇到列表元素,该return True语句就会立即跳出循环并终止算法。for

于 2012-06-03T17:47:34.060 回答