在列表中查找子列表

Finding sublists inside lists

我有一个列表,可能包含也可能不包含子列表作为元素,我需要检查元素是否是子列表。

例如考虑

>>> list = ['a', 'b', 'c', ['d', 'e'] ]

如我所料,我得到了

>>> list[2]
'c'
>>> list[3]
['d', 'e']
>>> list[3][1]
'e'

>>> len(list[1])
1
>>> len(list[3])
2

还有

>>> type(list[1])
<type 'str'>
>>> type(list[3])
<type 'list'>

到目前为止一切顺利。然而,非常令人惊讶(至少对于我这样的 python 新手来说)

>>> type(list[1]) is list
False
>>> type(list[3]) is list
False

有人可以解释一下吗?显然我可以只使用 len() 来确定一个元素是否是一个子列表,但我认为显式类型检查应该更合适,因为它更准确地说明了我想要做什么。谢谢。

您使用了名称 list 并且 隐藏了内置

因此,您正在测试 在您的列表中 中的一个元素的类型是否与列表本身是同一对象。

重命名您的列表以不使用相同的名称:

>>> lst = ['a', 'b', 'c', ['d', 'e'] ]
>>> type(lst[3])
<type 'list'>
>>> type(lst[3]) is list
True

一般来说,您想使用 isinstance() function 来测试某物是否为列表:

>>> isinstance(lst[3], list)
True

简单检查元素是否为列表:

def is_inside(my_list, elem):
    if isinstance(my_list, list):
        return any([is_inside(child, elem) for child in my_list])
    else:
        return my_list == elem

In: is_inside(['a', 'b', 'c', ['d', 'e']], 'e')
Out: True

In: is_inside(['a', 'b', 'c', ['d', 'e']], 'f')
Out: False