リストインデックスで値を取得するクリーンな方法はありますかNone
、またはインデックスがPythonの範囲外または範囲にある場合は?
それを行う明白な方法は次のとおりです。
if len(the_list) > i:
return the_list[i]
else:
return None
ただし、冗長性はコードの可読性を低下させます。代わりに使用できるクリーンでシンプルなワンライナーはありますか?
リストインデックスで値を取得するクリーンな方法はありますかNone
、またはインデックスがPythonの範囲外または範囲にある場合は?
それを行う明白な方法は次のとおりです。
if len(the_list) > i:
return the_list[i]
else:
return None
ただし、冗長性はコードの可読性を低下させます。代わりに使用できるクリーンでシンプルなワンライナーはありますか?
試す:
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
これにはリストスライスが適していると思います:
>>> x = [1, 2, 3]
>>> a = x [1:2]
>>> a
[2]
>>> b = x [4:5]
>>> b
[]
したがって、x[i] が必要な場合は、常に x[i:i+1] にアクセスしてください。必要な要素が存在する場合は、そのリストを取得します。そうしないと、空のリストが返されます。
あなたの目的のために、特定の条件が満たされない場合、デフォルトで返されるそのままの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'>
return the_list[i] if len(the_list) > i else None
スライスと反復の組み合わせ
next(iter(the_list[i:i+1]), None)