如何检查列表是否包含其他列表? 我需要它以便
[['cow'], 12, 3, [[4]]]
会输出True
,而类似
['cow', 12, 3, 4]
会输出False
。
答案 0 :(得分:3)
如果您还想查找列表的子类,则应使用isinstance
:
def any_list_in(obj):
return any(isinstance(item, list) for item in obj)
条件为True
后, any
会立即停止,因此只需要根据需要检查任意数量的项目。
>>> any_list_in([['cow'], 12, 3, [[4]]])
True
>>> any_list_in(['cow', 12, 3, 4])
False
isinstance(item, list) for item in obj
是generator expression,其作用类似于for
- 循环或列表理解。它也可以写成(更长,稍慢但可能更好理解):
def any_list_in(obj):
for item in obj:
if isinstance(item, list):
return True
return False
答案 1 :(得分:0)
这是一个使用列表理解的简洁解决方案。
鉴于obj = [['cow'], 12, 3, [[4]]]
,我们将首先使用列表推导来获取obj
中的类型列表:
>>> [type(x) for x in obj]
[<type 'list'>, <type 'int'>, <type 'int'>, <type 'list'>]
现在,我们只需检查list
是否在我们创建的类型列表中。让我们重新审视列表理解并将其转换为布尔表达式:
>>> list in [type(x) for x in obj]
那里,这很好,也很短。它有用吗?
>>> obj = [['cow'], 12, 3, [[4]]]
>>> list in [type(x) for x in obj]
True
>>> obj = ['cow', 12, 3, 4]
>>> list in [type(x) for x in obj]
False
答案 2 :(得分:0)
如果您的列表中不包含某些带有&#39; [&#39;在它。
def check(a):
a=str(a)
if a.count('[')==1: # or a.count(']')==1;
return False
return True
在python 2.7中,我们有一个用于此工作的模块:(我不知道python 3.x中的任何此类模块)
from compiler.ast import flatten
def check(a):
if flatten(a)==a:
return False
return True