-8

>これの何が問題になっていますか。

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)

どうして両方が真になるのですか?

4

3 に答える 3

3

中には2つの質問があるようですので、両方に答えます。

まず第一に、なぜnums[len(nums)-1]同じnums[-1]ですか?インデックスを指定する場合、Pythonでは次のように解釈される負の数を使用できます。inが負の場合inums[i]インデックスlen(nums)+iが返されます。したがって、基本的に[-1]、最後の要素、最後[-2]から2番目の要素などを取得します。

2番目の質問は、2つの形式が同一である理由です。

if expression:
    return True
else
    return False

return expression

expressionこの場合はブール型を返す式なので、またはのいずれTrueFalseです。ステートメントはそれifを正確にチェックします。式がtrueに等しい場合はtrueを返し、そうでない場合(式がfalseに等しい場合)はfalseを返します。

したがって、式自体はすでにtrueまたはfalseであるため、式自体を返すことができます(そして、よりクリーンにする必要があります)。

それ自体がブール式ではない場合expressionでも、ifステートメントは評価するブール型をチェックします(たとえば、空でない文字列がtrueになるか、0以外の数値もtrueになります)。bool(expression)短い構文を維持するために、コメントで言及されているlarsmansのように、を使用して式をブール値に明示的に変換できます。

于 2012-10-25T16:56:41.900 に答える
0

nums[-k] は nums[len(nums)-k] の短縮形です。最後の k 番目の要素を取得するには、nums[-k] という表記を使用します。通常、表記が何を表しているかは明らかであり、コンパイラーはその python コードを機械語コードに変換する方法を知っています。他の省略形には、最初の k 要素を取得する nums[:k] や、最後の k 番目の要素までのすべての要素を取得する nums[:-k] などがあります。リスト操作は、Python の大きな強みです。

http://www.diveintopython.net/native_data_types/lists.html

于 2012-10-25T16:58:50.260 に答える
0

どちらもまったく同じで、どちらも True と評価されるからです。

于 2012-10-25T16:53:43.387 に答える