Pythonで文字列が1文字からなることを効率的にチェックする方法
質問
文字列
s
が一文字だけからなることを確認する効率的な方法は何ですか?
'A'
? のように
all_equal(s, 'A')
のようなもので、このような挙動になります。
all_equal("AAAAA", "A") = True
all_equal("AAAAAAAAAAA", "A") = True
all_equal("AAAAAfAAAAA", "A") = False
2つの一見非効率的な方法は、まず文字列をリストに変換して各要素をチェックする、または2番目に正規表現を使用することです。もっと効率的な方法があるのでしょうか、それともこれらがPythonでできる最善の方法なのでしょうか? ありがとうございます。
どのように解決するのですか?
これは圧倒的に高速で、たとえ
count()
で時間を計って、その優れた
mgilson's タイミングスイート
:
s == len(s) * s[0]
ここでは、すべてのチェックはPythonのCコード内で行われています。
- len(s)文字を割り当てる。
- は最初の文字でスペースを埋めます。
- 2つの文字列を比較します。
文字列が長ければ長いほど、タイムボーナスは大きくなります。ただし、mgilsonが書いているように、文字列のコピーを作成するので、文字列の長さが何百万シンボルにもなる場合は、問題になる可能性があります。
タイミング結果からわかるように、一般的にタスクを解決する最速の方法は、各シンボルに対してPythonのコードを実行しないことです。しかし
set()
ソリューションもPythonライブラリのCコード内ですべての作業を行いますが、それでも遅いのは、おそらくPythonオブジェクトインターフェイスを通して文字列を操作しているためです。
UPDです。
空文字列の場合について。これをどうするかは、タスクに強く依存します。タスクが "文字列内のすべてのシンボルが同じかどうかをチェックする" である場合。
s == len(s) * s[0]
は有効な答えです(シンボルがない場合はエラー、例外はOKです)。タスクが "一意な記号がちょうど1つあるかどうかをチェックする" である場合、空の文字列は偽を与えるはずで、答えは次のようになります。
s and s == len(s) * s[0]
または
bool(s) and s == len(s) * s[0]
のように、ブーリアン値を受け取ることができます。最後に、タスクを "異なるシンボルがないかをチェックする" と理解すると、空の文字列に対する結果は True であり、答えは
not s or s == len(s) * s[0]
.
関連
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] Pythonで文字列を反転させる
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み】文字列中のある文字の出現回数をカウントする
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
最新
-
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の構文に新しいステートメントを追加することはできますか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?