如果我们有以下列表:
list = ['UMM', 'Uma', ['Ulaster','Ulter']]
如果我需要找出列表中的元素是否为列表本身,以下代码中的aValidList应替换为什么?
for e in list:
if e == aValidList:
return True
是否有特殊的导入需要使用?有没有最好的方法来检查一个变量/元素是否为列表?
如果我们有以下列表:
list = ['UMM', 'Uma', ['Ulaster','Ulter']]
如果我需要找出列表中的元素是否为列表本身,以下代码中的aValidList应替换为什么?
for e in list:
if e == aValidList:
return True
是否有特殊的导入需要使用?有没有最好的方法来检查一个变量/元素是否为列表?
使用isinstance
函数:
if isinstance(e, list):
如果你想检查一个对象是否是列表或元组,可以将多个类传递给 isinstance
:
if isinstance(e, (list, tuple)):
确定您想要的列表
具有哪些特定属性。它们需要是可索引的吗?可以进行切片操作吗?它们需要一个.append()
方法吗?
查找描述该特定类型的抽象基类,该基类在collections
模块中。
使用isinstance
:
isinstance(x, collections.MutableSequence)
你可能会问:"为什么不只是使用type(x) == list
?" 你不应该这样做,因为这样你就不能支持看起来像列表的东西。而Python思想的一部分是鸭子类型:
换句话说,你不应该要求对象是我看到一只走路像鸭子,游泳像鸭子,叫声像鸭子的鸟,我就把那只鸟叫做鸭子。
list
,只需要它们具有你需要的方法即可。例如,collections
模块提供了一堆抽象基类,这有点像Java接口。任何是collections.Sequence
实例的类型都将支持索引。collections.MutableSequence
对于 list
是正确的,但这里是主要参考),对于其他阅读此答案并感到好奇的人:http://docs.python.org/library/collections.html#collections-abstract-base-classes - ninjageckoisinstance(x, list)
呢?这是简单明了、标准做法,并被认为是良好的实践。而且,考虑接口和抽象基类很有可能会让初学者程序员感到困惑。即使一个"更好"的解决方案存在,如果使用起来过于麻烦而无法保持一致性,那就不是最佳实践。 - alexisisinstance(x, list)
并不被认为是个好的编程实践!如果你确定永远不会遇到任何自定义对象,也许这样做没问题,但是使用isinstance(x, collections.MutableSequence)
又有多难呢? - Katriel你正在寻找的表达式可能是:
...
return any( isinstance(e, list) for e in my_list )
测试:
>>> my_list = [1,2]
>>> any( isinstance(e, list) for e in my_list )
False
>>> my_list = [1,2, [3,4,5]]
>>> any( isinstance(e, list) for e in my_list )
True
>>>
any()
而不是一些循环和if语句的组合,可以使代码更简洁。 - Christophif type(e) is list:
print('Found a list element inside the list')
你可以简单地写:
for item,i in zip(your_list, range(len(your_list)):
if type(item) == list:
print(f"{item} at index {i} is a list")
list
作为变量名称,因为它会遮盖内置的list()
函数。(2)这些圆括号应该表示什么意思? - Rik Poggi