大文字と小文字を区別せずにPythonで文字列を比較する最も簡単な方法は何ですか?
もちろん、(str1.lower() <= str2.lower()) などを行うこともできますが、これにより 2 つの追加の一時文字列が作成されます (明らかな alloc/gc オーバーヘッドを伴います)。
C の stricmp() に相当するものを探していると思います。
[さらにいくつかのコンテキストが要求されたので、簡単な例で説明します:]
文字列の長いリストをソートしたいとします。theList.sort() を実行するだけです。これは O(n * log(n)) 文字列比較であり、メモリ管理はありません (すべての文字列とリスト要素はある種のスマート ポインターであるため)。あなたは幸せです。
ここで、同じことをしたいと思いますが、大文字と小文字は無視します (単純化して、すべての文字列が ASCII であるとしましょう。したがって、ロケールの問題は無視できます)。theList.sort(key=lambda s: s.lower()) を実行できますが、比較ごとに 2 つの新しい割り当てが発生し、ガベージ コレクターに重複した (縮小された) 文字列の負担がかかります。このようなメモリ管理の各ノイズは、単純な文字列比較よりも桁違いに遅くなります。
ここで、stricmp() のようなインプレース関数を使用して、次のようにします。あなたは再び幸せです。
問題は、Python ベースの大文字と小文字を区別しない比較には暗黙的な文字列の重複が含まれるため、C ベースの比較 (おそらくモジュール文字列) を見つけることを期待していました。
そのようなものは見つからなかったので、ここで質問します。(これで質問が明確になることを願っています)。