>これの何が問題になっていますか。
Code-1
def first_last6(nums):
if nums[0]==6 or nums[len(nums)-1] == 6:
return True
else:
return False
Code-2
def first_last6(nums):
return (nums[0]==6 or nums[-1]== 6)
どうして両方が真になるのですか?
Code-1
def first_last6(nums):
if nums[0]==6 or nums[len(nums)-1] == 6:
return True
else:
return False
Code-2
def first_last6(nums):
return (nums[0]==6 or nums[-1]== 6)
どうして両方が真になるのですか?
中には2つの質問があるようですので、両方に答えます。
まず第一に、なぜnums[len(nums)-1]
同じnums[-1]
ですか?インデックスを指定する場合、Pythonでは次のように解釈される負の数を使用できます。inが負の場合i
、nums[i]
インデックスlen(nums)+i
が返されます。したがって、基本的に[-1]
、最後の要素、最後[-2]
から2番目の要素などを取得します。
2番目の質問は、2つの形式が同一である理由です。
if expression:
return True
else
return False
と
return expression
expression
この場合はブール型を返す式なので、またはのいずれTrue
かFalse
です。ステートメントはそれif
を正確にチェックします。式がtrueに等しい場合はtrueを返し、そうでない場合(式がfalseに等しい場合)はfalseを返します。
したがって、式自体はすでにtrueまたはfalseであるため、式自体を返すことができます(そして、よりクリーンにする必要があります)。
それ自体がブール式ではない場合expression
でも、ifステートメントは評価するブール型をチェックします(たとえば、空でない文字列がtrueになるか、0以外の数値もtrueになります)。bool(expression)
短い構文を維持するために、コメントで言及されているlarsmansのように、を使用して式をブール値に明示的に変換できます。
nums[-k] は nums[len(nums)-k] の短縮形です。最後の k 番目の要素を取得するには、nums[-k] という表記を使用します。通常、表記が何を表しているかは明らかであり、コンパイラーはその python コードを機械語コードに変換する方法を知っています。他の省略形には、最初の k 要素を取得する nums[:k] や、最後の k 番目の要素までのすべての要素を取得する nums[:-k] などがあります。リスト操作は、Python の大きな強みです。
どちらもまったく同じで、どちらも True と評価されるからです。