如何检查列表的元素是否是列表(在Python中)?
如果我们有以下清单:如何检查列表的元素是否是列表(在Python中)?,python,Python,如果我们有以下清单: list = ['UMM', 'Uma', ['Ulaster','Ulter']] 如果我需要确定列表中的元素本身是否是列表,那么我可以用什么来替换下面代码中的AvailList for e in list: if e == aValidList: return True 有特殊的进口货要用吗?是否有检查变量/元素是否为列表的最佳方法?使用: 如果要检查对象是列表还是元组,请将几个类传递给isinstance: if isinstance(e,
list = ['UMM', 'Uma', ['Ulaster','Ulter']]
如果我需要确定列表中的元素本身是否是列表,那么我可以用什么来替换下面代码中的AvailList
for e in list:
if e == aValidList:
return True
有特殊的进口货要用吗?是否有检查变量/元素是否为列表的最佳方法?使用:
如果要检查对象是列表还是元组,请将几个类传递给isinstance
:
if isinstance(e, (list, tuple)):
您要寻找的表达式可能是:
...
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
>>>
列表的特定属性。它们需要可转位吗?切片的?他们需要.append()
方法吗
您可能会问“为什么不直接使用
type(x)=list
?”您不应该这样做,因为这样您就不支持类似于list的东西了。Python思维的一部分是:
我看见一只鸟走路像鸭子,游泳像鸭子,嘎嘎叫像鸭子,我叫它鸭子
换句话说,您不应该要求对象是
list
s,只要求它们具有您需要的方法。collections
模块提供了一组抽象基类,有点像Java接口。任何类型都是集合的实例。例如,序列将支持索引。更直观的方法可能是这样的
if 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")
你为什么需要它?您正在尝试展平列表吗?另外:(1)不要将
list
用作变量名,因为它会影响内置的list()
。(2) 这些圆括号应该是什么意思?@RikPoggi这是我正在尝试的练习。最初,我们被要求遍历一个标准列表并返回以大写字母“U”开头的元素计数。我想看看是否可以展开它,在列表和子列表中搜索相同的内容并返回计数。因此,如果上面的列表是输入,那么该过程将返回四个计数。()是打字错误。:-)可能值得强调的是,问题中名为list
的变量将隐藏list
类型,这意味着如果简单地粘贴,此处发布的大多数其他答案都将失败。(这让我很尴尬,我经常被它咬到。)+1用于使用any()
而不是一些for循环if组合。抽象基类引用(collections.MutableSequence
对于list
是正确的,但这里是主要引用),对于正在阅读此答案并感到好奇的其他人:@ninjagecko yep这是#2=)中的链接@Alex您的建议在技术上是正确的,但它需要额外的工作,而这通常是不必要的。为什么不直接使用isinstance(x,list)?这是直接的、标准的实践,被认为是良好的实践。另外,考虑接口和ABC可能会让初学者感到困惑。如果一致使用“更好”的解决方案太麻烦,那么它就不是最佳做法。@alexisisinstance(x,list)
不被认为是好做法,至少在我的书中不是这样!如果你确信你永远不会看到任何自定义对象,那没关系,但是要做到isinstance(x,collections.MutableSequence)
有多难呢?你的作者可能最清楚,所以我不会为我的观点辩护。但我刚刚查看了[python常见问题解答][1],它只是建议对类使用isinstance
,或者最好完全避免使用它。
if 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")