如何获取python列表的第n个元素或默认值(如果不可用)

时间:2010-03-22 12:17:01

标签: python list

我正在寻找dictionary.get(key, default)的python等效列表。是否有任何一个习惯用语来获取列表的第n个元素或默认值(如果不可用)?

例如,给定一个列表myList我想获得myList[0],如果myList是一个空列表,则为5。

感谢。

11 个答案:

答案 0 :(得分:103)

l[index] if index < len(l) else default

为支持负指数,我们可以使用:

l[index] if -len(l) <= index < len(l) else default

答案 1 :(得分:44)

try:
   a = b[n]
except IndexError:
   a = default

编辑:我删除了对TypeError的检查 - 可能最好让调用者处理这个。

答案 2 :(得分:26)

(a[n:]+[default])[0]

这可能会更好a变大

(a[n:n+1]+[default])[0]

这是有效的,因为如果a[n:]

,则n => len(a)为空列表

以下是一个使用range(5)

的示例
>>> range(5)[3:4]
[3]
>>> range(5)[4:5]
[4]
>>> range(5)[5:6]
[]
>>> range(5)[6:7]
[]

完整的表达

>>> (range(5)[3:4]+[999])[0]
3
>>> (range(5)[4:5]+[999])[0]
4
>>> (range(5)[5:6]+[999])[0]
999
>>> (range(5)[6:7]+[999])[0]
999

答案 3 :(得分:23)

刚刚发现:

next(iter(myList), 5)

iter(l)返回myList上的迭代器,next()使用迭代器的第一个元素,并引发StopIteration错误,除非使用默认值调用,这是这里的情况是第二个参数5

这只适用于你想要第一个元素的情况,在你的例子中就是这种情况,但在问题的文本中却没有,所以...

此外,它不需要在内存中创建临时列表,它适用于任何类型的迭代,即使它没有名称(参见Xiong Chiamiov对gruszczy的回答的评论)

答案 4 :(得分:16)

(L[n:n+1] or [somedefault])[0]

答案 5 :(得分:4)

  

...在dict.get(key, default)的python中查找等效的列表

对于一般的迭代,有itertools recipes这样做。为方便起见,您可以> pip install more_itertools并导入为您实现此类配方的第三方库:

<强>代码

import more_itertools as mit


mit.nth([1, 2, 3], 0)
# 1    

mit.nth([], 0, 5)
# 5    

<强>详细

以下是nth食谱的实施:

def nth(iterable, n, default=None):
    "Returns the nth item or a default value"
    return next(itertools.islice(iterable, n, None), default)

dict.get()类似,此工具会返回缺失索引的默认值。它适用于一般的迭代:

mit.nth((0, 1, 2), 1)                                      # tuple
# 1

mit.nth(range(3), 1)                                       # range generator (py3)
# 1

mit.nth(iter([0, 1, 2]), 1)                                # list iterator 
# 1  

答案 6 :(得分:1)

将@ Joachim与上述相结合,您可以使用

@client

示例:

next(iter(my_list[index:]), default)

或者,可能更清楚,但没有next(iter(range(10)[8:]), 11) 8 >>> next(iter(range(10)[12:]), 11) 11

len

答案 7 :(得分:1)

使用Python 3.4的contextlib.suppress(exceptions)构建类似于getitem()的{​​{1}}方法。

getattr()

答案 8 :(得分:1)

虽然这不是单行解决方案,但您可以像这样定义一个具有默认值的函数:

def get_val(myList, idx, default=5):
    try:
        return myList[idx]
    except IndexError:
        return default

答案 9 :(得分:0)

一种便宜的解决方案是使用枚举来真正做一个字典,并像往常一样使用.get()

 dict(enumerate(l)).get(7, my_default)

答案 10 :(得分:0)

阅读完答案后,我将使用:

(L[n:] or [somedefault])[0]
相关问题