list - 如何获取 python 列表的第n 个元素,如果没有,则为默认值

  显示原文与译文双语对照的内容
90 2

我正在寻找 python的dictionary.get(key, default) 中等价的列表。是否有一个线性习惯用法获取列表的n 个元素或者默认值如果不可以用?

例如,给出一个列表,我想获取 myList[0],或者 5如果 myList 是空列表。

谢谢。

时间:原作者:

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

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

l[index] if -len(l) <= index <len(l) else default
原作者:
61 0
try:
 a = b[n]
except IndexError:
 a = default

编辑:我删除了TypeError检查probably最好让调用者处理这个问题。

原作者:
76 4
(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
原作者:
84 5

刚发现:

next(iter(myList), 5)

返回的值,如果用默认值调用,则抛出 StopIteration 错误,这是第二个参数,它是第二个参数。

这只是在你想要 1st 元素时工作,例如,在你的示例中,但不是在问题的文本中。"。

这里外,它不需要在内存中创建临时列表,也不需要任何类型的名称( 即chiamiov对gruszczy的回答) 。

原作者:
64 5

。在列表中查找用于列表的等价的python

有一个 itertools食谱,它可以用于一般的iterables 。为了方便,你可以使用 > 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() 一样,这里工具返回缺失索引的默认值。它适用于一般 iterables:

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 
原作者:
...