在Python中获取列表索引的getattr函数?

25 浏览
0 Comments

在Python中获取列表索引的getattr函数?

我知道可以使用try/except或if/else并根据错误或else子句设置一个默认值,但我只是想知道是否有一行代码可以像getattr一样完成这个任务。

0
0 Comments

在Python中,当我们想要获取列表中特定索引位置的元素时,通常会使用`container[i]`的方式进行操作。然而,有时候我们需要处理一些特殊情况,比如索引超出列表长度的情况,或者设置默认值来处理索引不存在的情况。那么如何更好地处理这些情况呢?

在下面的内容中,我们可以看到三种不同的方法来解决这个问题。首先是"好"的方法,通过定义一个辅助函数`my_getitem`来处理索引异常的情况,并返回默认值。代码如下:

def my_getitem(container, i, default=None):
    try:
        return container[i]
    except IndexError:
        return default

接下来是"坏"的方法,通过使用条件表达式来实现一行代码解决问题。代码如下:

item = container[i] if i < len(container) else default

最后是"丑陋"的方法,这些方法都是一些小技巧,不建议使用。代码如下:

item = (container[i:] + [default])[0]
item, = container[i:i+1] or [default]
item = container[i] if container[i:] else default
item = dict(enumerate(container)).get(i, default)
item = next(iter(container[i:i+1]), default)

以上就是为什么这样做是不好的原因。实际上,第三种方法还是比较好的,只要我们能够假设索引`i`是非负的。

总结起来,我们可以通过定义一个辅助函数或者使用条件表达式来更好地处理获取列表索引的问题。但是一些小技巧的方法并不推荐使用。

0