Python 2.6でランダムな文字列 (これでOK?)
2023-08-27 02:18:56
質問
私はPythonでランダムな文字列を生成する、よりPythonicな方法を見つけようとしてきました。一般的に、私は次のようなものを見ます。
''.join(random.choice(string.letters) for i in xrange(len))
長い文字列を生成したい場合は最悪です。
私はしばらくの間 random.getrandombits について考えていました。そして、それをビットの配列に変換し、それを16進エンコードする方法を考え出しました。python 2.6を使用して、私はbitarrayオブジェクトに出会いましたが、これは文書化されていません。 どうにかして、私はそれを動作させることができ、それは本当に速いようです。
私のノートブック上で50milのランダムな文字列を約3秒で生成しました。
def rand1(leng):
nbits = leng * 6 + 1
bits = random.getrandbits(nbits)
uc = u"%0x" % bits
newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
ba = bytearray.fromhex(uc[:newlen])
return base64.urlsafe_b64encode(str(ba))[:leng]
編集
heikogerlachは、問題を引き起こしているのが奇数文字であることを指摘しました。常に偶数の16進数でfromhexを送信するように新しいコードが追加されました。
同じように高速でこれを行うより良い方法があるかどうか、まだ興味があります。
どのように解決するのですか?
import os
random_string = os.urandom(string_length)
で、urlセーフの文字列が必要な場合は :
import os
random_string = os.urandom(string_length).hex()
(この場合、random_string の長さは string_length よりも大きいことに注意してください)
関連
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Ctrl-Cで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のインスタンス変数とクラス変数
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Pythonでランダムな文字列