ランダム文字列 - Pythonのランダムな文字列




シャッフル 乱数 (9)

Pythonでどのようにランダムな文字列を作成しますか?

あなたがこれをやるまで番号をつけて文字の繰り返しが必要でしたこれは私が作ったものです

def random_id(length):
    number = '0123456789'
    alpha = 'abcdefghijklmnopqrstuvwxyz'
    id = ''
    for i in range(0,length,2):
        id += random.choice(number)
        id += random.choice(alpha)
    return id

Answers

元の質問に答える:

os.urandom(n)

からの引用: http://docs.python.org/2/library/os.html : http://docs.python.org/2/library/os.html

暗号の使用に適したランダムなnバイトの文字列を返します。

この関数は、OS固有のランダム性ソースからランダムなバイトを返します。 返されるデータは、暗号化アプリケーションには十分に予測できないはずですが、正確な品質はOSの実装に依存します。 UNIXのようなシステムでは、これは/ dev / urandomを照会し、WindowsではCryptGenRandomを使用します。 ランダム性のソースが見つからない場合は、NotImplementedErrorが発生します。

プラットフォームによって提供される乱数生成器への使いやすいインタフェースについては、random.SystemRandomを参照してください。



この質問はかなり無秩序なので、これはあなたのために働くかもしれません:

>>> import uuid
>>> print uuid.uuid4()
58fe9784-f60a-42bc-aa94-eb8f1a7e5c17

小文字などから文字列を生成する:

import random, string

def randomword(length):
   letters = string.ascii_lowercase
   return ''.join(random.choice(letters) for i in range(length))

結果:

>>> randomword(10)
'vxnxikmhdc'
>>> randomword(10)
'ytqhdohksy'

あなたは本当にあなたが必要とするランダムな文字列の種類についてはあまり言いませんでした。 しかし、いずれの場合でも、 randomモジュールを調べる必要があります。

非常に簡単な解決策が以下に貼り付けられています。

import random

def randstring(length=10):
    valid_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    return ''.join((random.choice(valid_letters) for i in xrange(length)))

print randstring()
print randstring(20)

random_name = lambda length: ''.join(random.sample(string.letters, length))

長さは<= len(string.letters)= 53でなければなりません。結果の例

   >>> [random_name(x) for x in range(1,20)]
['V', 'Rq', 'YtL', 'AmUF', 'loFdS', 'eNpRFy', 'iWFGtDz', 'ZTNgCvLA', 'fjUDXJvMP', 'EBrPcYKUvZ', 'GmxPKCnbfih', 'nSiNmCRktdWZ', 'VWKSsGwlBeXUr', 'i
stIFGTUlZqnav', 'bqfwgBhyTJMUEzF', 'VLXlPiQnhptZyoHq', 'BXWATvwLCUcVesFfk', 'jLngHmTBtoOSsQlezV', 'JOUhklIwDBMFzrTCPub']
>>> 

楽しい。 ;)


>>> import random
>>> import string
>>> s=string.lowercase+string.digits
>>> ''.join(random.sample(s,10))
'jw72qidagk

あなたは以下のようなランダムなアスキー文字を作ることができます:

import random
print chr(random.randint(0,255))

そして、次のような長い文字列を作ります:

len = 50
print ''.join( [chr(random.randint(0,255)) for i in xrange(0,len)] )

あなたは疑問に思って、 "この場合、ループインデックスに1から5のどのようにアクセスすればよいですか?"と書いています。

ただし、リストのインデックスはゼロから実行されます。 だから、あなたが実際に望むのは、リスト内の各項目の索引と項目です。数字が1から始まるかどうかを知る必要があります。幸いにも、Pythonではどちらか一方または両方を行うのは簡単です。

最初に、列挙関数を明確にするために、リスト内の各項目のインデックスと対応する項目を繰り返し返します。

alist = [ 1, 2, 3, 4, 5 ]

for n,a in enumerate(alist):
    print( "%d %d"%(n,a) )

上記の出力は、

0 1
1 2
2 3
3 4
4 5

インデックスは0から始まることに注意してください。この種の索引付けは、PythonやCなどの最新のプログラミング言語では一般的です。

ループをリストの一部にする場合は、リストの一部に対して標準のPython構文を使用できます。 たとえば、リスト内の2番目の項目から最後の項目までをループするには、次のようにします。

for n,a in enumerate(alist[1:-1]):
    print( "%d %d"%(n,a) )

再び、出力インデックスは0から始まり、

0 2
1 3
2 4

これは、enumerate()のstart = nスイッチにつながります。 これは単にインデックスをオフセットするだけで、ループ内のインデックスに同じ番号を簡単に追加することができます。

for n,a in enumerate(alist,start=1):
    print( "%d %d"%(n,a) )

その出力は

1 1
2 2
3 3
4 4
5 5






python