[解決済み] Python 2 は文字列と int をどのように比較するのですか?なぜリストは数値より大きく、タプルはリストより大きく比較されるのですか?
2022-04-21 08:01:41
質問
次のスニペットは、出力にアノテーションをつけたものです( ideone.comで見たように ):
print "100" < "2" # True
print "5" > "9" # False
print "100" < 2 # False
print 100 < "2" # True
print 5 > "9" # False
print "5" > 9 # True
print [] > float('inf') # True
print () > [] # True
なぜこのような出力になるのか、どなたか説明してください。
実装の詳細
- この動作は言語仕様で定められているのですか、それとも実装者次第なのですか?
- Pythonの主要な実装の間に違いはあるのでしょうか?
- Python言語のバージョンによる違いはありますか?
どのように解決するのですか?
からの Python 2 マニュアル :
<ブロッククオートCPythonの実装の詳細です。数値以外の異なる型のオブジェクトは型名で並びます。適切な比較をサポートしない同じ型のオブジェクトはアドレスで並びます。
2つの文字列や2つの数値型を並べた場合、順序は期待通りの方法で行われます (文字列の場合は辞書順、整数の場合は数値順)。
数値型と非数値型を並べた場合、数値型が優先されます。
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
どちらも数値ではない互換性のない2つの型を並べる場合、型名のアルファベット順で並べます。
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
例外として、旧式のクラスは常に新式のクラスより前に来ます。
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
この動作は言語仕様で義務付けられているのでしょうか、それとも実装者の自由なのでしょうか?
そうでなければ、異なるタイプのオブジェクトは常に不等に比較され、一貫して、しかし恣意的に順序付けされます。
つまり、実装のディテールということですね。
Pythonの主要な実装で違いはありますか?
私はCPythonの公式実装しか使ったことがないので答えられませんが、PyPyなど他のPythonの実装もあります。
<ブロッククオートPython言語のバージョンによる違いはありますか?
Python 3.xでは、整数と文字列を並べようとするとエラーが発生するように動作が変更されました。
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] Pythonの__future__は何に使うのか、いつ、どのように使うのか、その仕組みについて
-
[解決済み】Python 3.6+で辞書は順番に並びますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない