我正在使用 Python 的单行条件语句:
x = 'foo' if myList[2] is not None else 'bar'
为 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
事先检查列表的长度并不是一个真正的选择,因为我不知道我感兴趣的是哪个值丢失了(即 myList
可能会丢失三个可能的任何一个或全部值。知道它只包含一个、两个或三个元素没有帮助)。
更新:无法根据列表长度赋值的原因如下。该列表的最大大小为 3,顺序很重要。填充的值将是对 API 的三个单独调用的结果。如果对 API 的所有调用都成功,我会得到一个完整的列表,一切都很好。然而,如果只有两个返回一个值,则列表只包含两个项目,但我无法知道哪个 API 调用导致了丢失的项目,因此分配变量就是碰运气。
所以,长话短说:我如何检查某个索引处不存在的列表项,同时保持 Python 的单行条件?
只是测试是否有足够的元素:
x = 'foo' if len(myList) > 2 and myList[2] is not None else 'bar'
如果缺少前 2 个元素或者元素超过 3 个都没有关系。重要的是列表足够长,可以让第 3 个元素排在首位。
我是一名优秀的程序员,十分优秀!