2016-09-16 7 views
0

文字Cのリスト(C = ['A'、 'B'、 'C​​'、 'D']など)からランダムな文字列を生成します。このランダムストリングは、長さN(例えば、N = 32)を有するものとする。すべての文字は、同じ例で8回発生する必要があります。同じ長さの文字から固定長のランダムな文字列を生成する

''.join(random.choice(C) for i in range(N)) 

をか良い方法があります:

どのように私は、各文字がここに均等に頻繁に発生することを実現することができますか?

+1

を私は何も見ませんあなたがやっているやり方が間違っている。 – zvone

+0

うわー、それは良い方法だ –

答えて

1

random.choiceを使用すると、各アイテムが同じ頻度で選択されることを保証することはできません。それぞれの選択肢は同じではない可能性があります。

これを行うための最善の方法は、文字のリストを維持し、それをシャッフルするだろう

...

characters = C * 8 
random.shuffle(characters) 
print(''.join(characters)) 

それとも、あなたがそれらの束たい場合:

def get_random_strings(characters, count, N): 
    """Yield `N` strings that contain each character in `characters` `count` times.""" 
    characters = list(characters) * count 
    for _ in xrange(N): 
     random.shuffle(characters) 
     yield ''.join(characters) 
関連する問題