60

リストインデックスで値を取得するクリーンな方法はありますかNone、またはインデックスがPythonの範囲外または範囲にある場合は?

それを行う明白な方法は次のとおりです。

if len(the_list) > i:
    return the_list[i]
else:
    return None

ただし、冗長性はコードの可読性を低下させます。代わりに使用できるクリーンでシンプルなワンライナーはありますか?

4

7 に答える 7

69

試す:

try:
    return the_list[i]
except IndexError:
    return None

または、1 つのライナー:

l[i] if i < len(l) else None

例:

>>> l=list(range(5))
>>> i=6
>>> print(l[i] if i < len(l) else None)
None
>>> i=2
>>> print(l[i] if i < len(l) else None)
2
于 2012-08-29T20:59:16.560 に答える
37

これにはリストスライスが適していると思います:

>>> x = [1, 2, 3]
>>> a = x [1:2]
>>> a
[2]
>>> b = x [4:5]
>>> b
[]

したがって、x[i] が必要な場合は、常に x[i:i+1] にアクセスしてください。必要な要素が存在する場合は、そのリストを取得します。そうしないと、空のリストが返されます。

于 2016-01-22T06:18:21.040 に答える
9

あなたの目的のために、特定の条件が満たされない場合、デフォルトで返されるそのままのelse部分を除外できます。None

def return_ele(x, i):
    if len(x) > i: return x[i]

結果

>>> x = [2,3,4]
>>> b = return_ele(x, 2)
>>> b
4
>>> b = return_ele(x, 5)
>>> b
>>> type(b)
<type 'NoneType'>
于 2012-08-29T21:07:04.077 に答える
8
return the_list[i] if len(the_list) > i else None
于 2012-08-29T21:00:30.770 に答える
7

スライスと反復の組み合わせ

next(iter(the_list[i:i+1]), None)
于 2020-01-10T10:21:16.423 に答える