Python:如何在不获取IndexError的情况下检查不存在的列表元素的值?

Pyd*_*man 1 python indexing if-statement list indexoutofboundsexception

我正在使用Python的单行条件:

x = 'foo' if myList[2] is not None else 'bar'
Run Code Online (Sandbox Code Playgroud)

分配给x列表的某个索引处的项目的值 - 当且仅当它存在时 - 如果不存在则分配给不同的值.

这是我的挑战:myList最多可以有三个元素,但不会总是有三个元素.因此,如果索引不存在(即,如果有问题的索引比列表的大小大1+),我显然会IndexError list out of range在内联条件可以分配变量之前获得:

In [145]: myList = [1,2]

In [146]: x = 'foo' if myList[2] is not None else 'bar'
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-146-29708b8c471e> in <module>()
----> 1 x = 'foo' if myList[2] is not None else 'bar'

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

预先检查列表的长度并不是一个选项,因为我不知道我感兴趣的是哪个值丢失(即myList可能缺少三个可能值中的任何一个或全部.知道它只包含一个或两个,或三个元素没有帮助).

更新:我无法根据列表的长度分配的原因如下.列表的最大大小为3,顺序很重要.填充的值将是对API的三次单独调用的结果.如果对API的所有调用都成功,我会得到一个完整列表,一切都很好.然而,如果只有两个返回一个值,那么列表只包含两个项目,但我不知道哪个API调用导致了缺少的项目,因此分配变量就是运气.

所以,长话短说:如何在某个索引处检查不存在的列表项,同时保持Python的单行条件?

Mar*_*ers 8

只测试是否有足够的元素:

x = 'foo' if len(myList) > 2 and myList[2] is not None else 'bar'
Run Code Online (Sandbox Code Playgroud)

如果前两个元素缺失或者您有超过3个元素,则无关紧要.重要的是列表足够长,首先要有第3个元素.

  • @Pyderman:那是你如何构建那个列表的问题.这些是Python无法解决的问题; 您需要构造代码以避免将值放在任意索引处. (2认同)