1. ホーム
  2. python

[解決済み] リストインデックスが存在するかどうかを確認するにはどうすればよいですか?

2022-02-06 15:37:25

質問内容

まるで

if not mylist[1]:
    return False

動作しない

解決方法は?

の範囲にあるかどうかを確認する必要があります。 0 とリストの長さを指定します。

if 0 <= index < len(list):

と評価されますが、実際には

if (0 <= index) and (index < len(list)):

つまり、この条件はインデックスが範囲 [0, リストの長さ] 内にあるかどうかをチェックするものです。

Pythonはネガティブインデックスをサポートしています。Pythonの引用 ドキュメンテーション ,

もし i または j が負の値であれば、文字列の末尾からの相対的なインデックスとなる。 len(s) + i または len(s) + j が代入されます。ただし、-0は0のままであることに注意。

つまり、負のインデックスを使用すると、必ずリストの長さに値が加算され、その結果が使用されるということです。だから list[-1] という要素を与えることになります。 list[-1 + len(list)] .

ですから、もし負のインデックスを許容したいのであれば、次のようにインデックスがリストの長さを超えないかどうかをチェックすればよいのです。

if index < len(list):


別の方法として IndexError は、次のようになります。

a = []
try:
    a[0]
except IndexError:
    return False
return True

無効なインデックスにある要素にアクセスしようとすると IndexError が発生します。ですから、この方法は有効です。


質問にあった方法には問題があります。

if not mylist[1]:

例えば 1 の有効なインデックスです。 mylist を返し、さらに ファルシー値 . 次に not はそれを否定するので if の条件は、Truthyと評価されるでしょう。ですから False のように、実際にはリストに要素が存在するにもかかわらず、です。