查找列表中的子列表

时间:2015-01-19 10:55:57

标签: python list

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

例如考虑

>>> 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()来确定元素是否是子列表,但我认为显式类型检查应该更合适,因为它更准确地说明了我想要做什么。谢谢。

2 个答案:

答案 0 :(得分:3)

您使用了名称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

答案 1 :(得分:0)

只需检查元素是否为列表:

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