在列表中查找子列表
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
我有一个列表,可能包含也可能不包含子列表作为元素,我需要检查元素是否是子列表。
例如考虑
>>> 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