Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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,我提取从第三方服务器接收的数据: data = json.loads(response) if data: result = data.get('result') if result and len(result)>=38 and len(result[38])>=2: for item in result[38][2]: ... 该条件的思想是检查列表是否包含索引为38的元素(result[38])和索引为2的子元素(result

我提取从第三方服务器接收的数据:

data = json.loads(response)
if data:
    result = data.get('result')
    if result and len(result)>=38 and len(result[38])>=2: 
        for item in result[38][2]:
        ...
该条件的思想是检查列表是否包含索引为38的元素(
result[38]
)和索引为2的子元素(
result[38][2]
),但看起来它不起作用,因为我得到了以下异常-

如果结果和len(结果)>=38和len(结果[38])>=2:

TypeError:类型为“NoneType”的对象没有len()

对于结果[38][2]中的项目:

TypeError:“非类型”对象不可编辑


如何修改我的条件?

您的
结果[38]
值为
None
,并且
len(结果[38])
失败,因为
None
单例没有长度。即使它不是
None
,您的测试也可能失败,因为您需要39个元素才能存在索引38,但您只能在至少有38个元素时进行测试。如果正好有38个元素,您的
len(result)>=38
测试将为真,但仍然会得到一个
索引器

使用异常处理,而不是测试每个元素:

data = json.loads(response)
try:
    for item in data['result'][38][2]:
        # ...
except (KeyError, TypeError, IndexError):
    # either no `result` key, no such index, or a value is None
    pass
这比测试所有中间元素要简单得多:

if result and len(result) > 38 and result[38] and len(result[38]) > 2:

捕获
索引器
异常可能是解决方案之一。
结果[38]
的值为无。此外,您可以检查
结果[38]
的类型
列表
。像
如果result和len(result)>=38,type(result[38])==list和len(result[38])>=2:
但是我建议您使用
try/catch
实现块捕获可能的异常,比如
索引器
类型错误
。异常不能用作流控制元素。在使用之前最好先测试元素。Paoababto必须是Python的新的:Paoababto:Python不是java或C++。在Python中,使用异常进行流控制是一个非常好的想法。它使代码更具可读性和健壮性,只要您使用它来捕获特定的异常。@PacoAbato:Python中的异常处理成本很低,通常比测试嵌套结构中的每个元素都要低。在其他语言中,异常处理相对昂贵,因此不鼓励使用。我想这是风格的问题。IMHO使用异常作为流控制使代码更容易编写,但更难阅读。如果python风格使用它们,那么我不会再抱怨了,但是我会编写一个check函数并在使用result对象之前调用它。