Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查列表的元素是否是列表(在Python中)?_Python - Fatal编程技术网

如何检查列表的元素是否是列表(在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可能会让初学者感到困惑。如果一致使用“更好”的解决方案太麻烦,那么它就不是最佳做法。@alexis
    isinstance(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")