web-dev-qa-db-ja.com

Pythonでタプル比較はどのように機能しますか?

Core Pythonプログラミングの本を読んでいますが、著者は次のような例を示しています。

(4, 5) < (3, 5) # Equals false

だから、どのように/なぜ偽と等しいのだろうか? pythonはこれら2つのタプルをどのように比較しますか?

ところで、それは本で説明されていません。

139
Paulo

タプルは位置ごとに比較されます。最初のタプルの最初のアイテムは、2番目のタプルの最初のアイテムと比較されます。それらが等しくない場合(つまり、最初の要素が2番目の要素よりも大きいまたは小さい場合)、それが比較の結果です。

一般的なシーケンス操作 を参照してください:

同じタイプのシーケンスも比較をサポートしています。特に、タプルとリストは、対応する要素を比較することにより辞書式に比較されます。これは、等しいと比較するには、すべての要素が等しいことを比較し、2つのシーケンスが同じタイプで同じ長さでなければならないことを意味します。

また、詳細については 値の比較

組み込みコレクション間の辞書編集の比較は次のように機能します。

  • 2つのコレクションを比較する場合、それらは同じタイプで、同じ長さであり、対応する要素の各ペアは等しく比較する必要があります(たとえば、[1,2] == (1,2)はタイプが同じではないためfalseです)。
  • 順序比較をサポートするコレクションは、最初の等しくない要素と同じ順序で並べられます(たとえば、[1,2,x] <= [1,2,y]x <= yと同じ値を持ちます)。対応する要素が存在しない場合、短いコレクションが最初に順序付けられます(たとえば、[1,2] < [1,2,3]はtrueです)。

等しくない場合、シーケンスは最初の異なる要素と同じ順序になります。たとえば、cmp([1,2、x]、[1,2、y])はcmp(x、y)と同じ結果を返します。対応する要素が存在しない場合、短いシーケンスはより小さいと見なされます(たとえば、[1,2] <[1,2,3]はTrueを返します)。

注1<および>は、「より小さい」および「より大きい」を意味するのではなく、「前に」および「is after」:したがって(0、1)「is before」(1、0)。

注2:タプルは、n次元空間のベクトルとみなしてはならないそれらの長さ。

注3:質問を参照 https://stackoverflow.com/questions/36911617/python-2-Tuple-comparison :最初の要素のいずれかが2番目の要素よりも大きい場合にのみ、タプルが別のものより「大きい」とは思わないでください。

153
Dona

Pythonドキュメント で説明されています。

タプルとリストは、対応する要素の比較を使用して辞書式に比較されます。これは、等しいと比較するには、各要素が等しく比較され、2つのシーケンスが同じタイプで、同じ長さでなければならないことを意味します。

20
Keith

タプルの比較

Pythonの比較演算子は、タプルを使用できます。比較は、各タプルの最初の要素から始まります。 =<、または>と比較しない場合、2番目の要素に進みます。

例でこれを調べてみましょう。

    #case 1
    a=(5,6)
    b=(1,4)
    if (a>b):print("a is bigger")
    else: print("b is bigger")

    #case 2
    a=(5,6)
    b=(5,4)
    if (a>b):print("a is bigger")
    else: print ("b is bigger")

    #case 3
    a=(5,6)
    b=(6,4)
    if (a>b):print("a is bigger")
    else: print("b is bigger")

ケース1:

比較は、各タプルの最初の要素から始まります。この場合5> 1なので、出力aは大きくなります

ケース2:

比較は、各タプルの最初の要素から始まります。この場合、5> 5で決定的ではありません。したがって、次の要素に進みます。 6> 4なので、出力aは大きくなります

ケース3:

比較は、各タプルの最初の要素から始まります。この場合、5> 6が偽です。したがって、elseループに出力され、「bは大きい」と出力されます。

結論:

タプルは常に最初のインデックスを比較し、プログラムに従って出力を提供します。すべての要素を比較するわけではありません。

1

a = ('A','B','C') # see it as the string "ABC" b = ('A','B','D')

Aは、対応するASCII ord('A') #65に変換されます。他の要素も同じです

したがって、>> a>b # Trueは、文字列間の比較と考えることができます(実際には正確です)

整数についても同じことが言えます。

x = (1,2,3) # see it the string "123" y = (1,2,2) x > y # False

(1が1より大きくない、次へ移動する、2が2より大きくない、次の2へ移動するが3より小さい-辞書式-)

キーポイントは上記の回答に記載されています

要素は、アルファベット順で別の要素よりも前にあると考えてください。この場合、すべてのTuple要素を1つの文字列と見なしてください。

0
Bishoy Abd