>これの何が問題になっていますか。
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 と評価されるからです。