🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

523閲覧

pythonにおける比較

hashibirokou

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/15 01:50

python

1(-1, -10, -3, -4) > (-1, -2, -5)

の結果がFalseになる理由。

そして

python

11 > -1 == (1-2)

の結果がTrueになる理由を詳しく説明してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/03/15 01:57

どのようなことを考え、どこに納得がいっていないのでしょうか?
hashibirokou

2021/03/15 02:09

先に2番目のものについて:左から順に比較していくため、まず「1>-1」がTrueにより1が返される。そして(1-2)の結果として-1が返され、最終的には「1 == -1」の比較となりFalseのはずなのにTrueとなるのはなぜ? 1番目のものについて:(-1, -10, -3, -4)の方が(-1, -2, -5)より要素数が多く、TrueになるはずなのになぜFalse?
guest

回答2

0

ベストアンサー

python

1a = (-1, -10, -3, -4) 2b = (-1, -2, -5) 3 4# このとき 5a > b 6# は、以下のような動きをする 7def func(a, b): 8 length = min(len(a), len(b)) 9 for i in range(length): 10 if a[i] == b[i]: 11 continue 12 else: 13 return a[i] > b[i] 14 return len(a) > len(b)

つまり、先頭はどちらも-1で同じなので次に移動し、二番目同士を比較した-10 > -2の答えであるFalseが返されます。

公式ドキュメントの『値の比較』より引用:

● 比較の結果が等価となる2つのコレクションは、同じ型、同じ長さ、対応する要素どうしの比較の結果が等価でなければなりません (例えば、 [1,2] == (1,2) は型が同じでないので偽です)。

● 順序比較をサポートしているコレクションの順序は、最初の等価でない要素の順序と同じになります (例えば、 [1,2,x] <= [1,2,y] は x <= y と同じ値になります)。 対応する要素が存在しない場合、短い方のコレクションの方が先の順序となります (例えば、 [1,2] < [1,2,3] は真です)。


python

1a, b, c = 1, -1, (1-2) 2 3# このとき 4a > b == c 5# は、以下と同じ結果になる 6all((a > b, b == c))

投稿2021/03/15 02:14

編集2021/03/15 02:24
kirara0048

総合スコア1399

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hashibirokou

2021/03/15 02:20

「-1 < -1」がFalseだと思ってました。同じ値なら「-1 == -1」の評価なんですね。
guest

0

修正: ひとつめのタプルの比較では、先頭の要素から順に比較していくので、2番目の要素の比較-10 > -2が成立しない時点でFalseを返す。

ふたつめの比較は、1 > -1 and -1 == (1 - 2)として扱われるので、Trueを返す。

投稿2021/03/15 02:12

編集2021/03/15 02:26
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hashibirokou

2021/03/15 02:15

タプルの比較は要素の個数ではなく、各要素を先頭からそれぞれ比較していくということはわかりました。 では、リストの場合はどうなのでしょうか?リストも各要素を順に比較するのでしょうか?
kirara0048

2021/03/15 02:18

> 先頭の要素の比較-1 > -1が成立しない時点でFalseを返す。 これは違います。 右辺の二番目を-2から-11に変えて、`(-1, -10, -3, -4) > (-1, -11, -5)`を行ってみてください。Trueになるはずです。
Daregada

2021/03/15 02:21

Pythonは公式リファレンスが充実している(日本語版もある)ので、そういう疑問を持ったときは公式リファレンスを見ましょう。 たとえば、以下は等値比較に関する説明です。 > 同じ型のシーケンスは比較もサポートしています。特に、タプルとリストは対応する要素を比較することで辞書式順序で比較されます。つまり、等しいとされるためには、すべての要素が等しく、両シーケンスの型も長さも等しくなければなりません。(完全な詳細は言語リファレンスの 比較 を参照してください。) https://docs.python.org/ja/3/library/stdtypes.html#sequence-types-list-tuple-range
hashibirokou

2021/03/15 02:22

あるPythonの本に次のようなことが書いてあったので混乱してます。 「両辺のシーケンスが全て同一であれば、両シーケンスは同じものと判定され、要素数が多い方のオブジェクトが大きいと判断される。 [1, 2] < [1, 2, -1]はTrue。両辺のシーケンスの要素は2つ目までは同じ値だが、3つ目の要素を比較するとき右辺の方が長いため、左辺<右辺が成立してTrueが返される」と。
Daregada

2021/03/15 02:24

> 先頭の要素の比較-1 > -1が成立しない時点でFalseを返す。 これは違います。 お、本当だ。 修正します。
maisumakun

2021/03/15 03:25

> 両辺のシーケンスの要素は2つ目までは同じ値だが 同じ値でない要素があればそちらが優先です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問