2016-10-29 10 views
2

特定の位置のリストを分析し、位置が存在する場合はTrueを、そうでない場合はFalseを返す関数を記述しようとしています。リストのリスト内の位置が真であるか偽であるかを確認する

たとえば、 "list2"と呼ばれるリストのリストが7列と5行(基本的に各リストに7つの値があり、それ自身の行にある5リスト)のリストを持つ場合、関数はテストケースlist2 [5] [4]が行5と列4が存在するが、テストケースlist2 [8] [6]またはlist2 [-5] [ - 1]が実行されているので、関数を介してテストケースlist2 [5]行8と列6が存在せず、負の行と列を持つことができないため、関数を介してFalseを返す必要があります。どのようにこれを達成することができますか?

これはこれまでのコードです。試験した場合には、無効な構文を言いますが、私は私が私の目標は、インデント、コードifelse

def in_list(row, col, list): 
    if list[row][col] == True 
    return True 
    else: 
    return False 

答えて

1

実際に配列アイテムにアクセスしてテストする場合は、try .. exceptブロックにラップしてください。例外が発生した場合はFalseを返し、そうでない場合はTrueを返します。

しかし、簡単な方法があります。rowcolが有効なエントリを指すことをテストするだけで、配列の長さを使用できます。これを行う一つの方法があります。

def in_list(row, col, lst): 
    if 0 <= row < len(lst) and 0 <= col < len(lst[row]): 
     return True 
    else: 
     return False 

さらに簡潔な方法がありますが、これは明らかです。 if行の「ショートカット評価」は、rowが範囲内にない場合、colのチェックで例外を防止します。パラメータ名をlistからlstに変更しました。組み込みの名前を使用することは悪い考えです。私のコードでは、エントリの値がTrueまたはFalseであるかどうかをチェックしていないことに注意してください。もしあなたがそれを望むなら、私のコードにそのチェックを追加するのは簡単です。最後に、配列の行に異なる数の列がある場合は、私のコードも動作することに注意してください。これはPythonで可能です。私のコードは、この目的に適した要求された行だけをチェックします。

+0

ありがとうございました – user75747475

1

であるかを示す助けるために、とにかくそれを含めるしようと思いました。そして、コロンを使用「:」あなたはコロンを追加し、必要に応じて、あなたはおそらく別のエラーencouterますそれをインデントして、コードを固定したら

def in_list(row, col, list): 
    if list[row][col] == True: 
     return True 
    else: 
     return False 
+0

これは構文エラーを取り除きましたが、それでも位置をチェックしておらず、真または偽であるかどうかを確認していません。 – user75747475

0

:Pythonで許可されていない存在しないインデックスへのアクセスを、それはdoesnのtアマウトはFalseになります。

これを回避する方法の1つは、try: ... exceptブロックにテストを囲むことです。

+0

確かに。私はこれを修正した。 – bli