从具有相同出现次数的给定字符生成固定长度的随机字符串
Generate random strings of fixed length from given characters with equal occurance
我想从字符列表 C 生成随机字符串(例如 C = ['A'、'B'、'C'、'D'])。该随机字符串的长度应为 N(例如 N = 32)。每个字符出现的频率应该相同 - 在该示例中为 8 次。
如何实现每个字符在这里出现的频率相同:
''.join(random.choice(C) for i in range(N))
或者有更好的方法吗?
如果您使用 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)
我想从字符列表 C 生成随机字符串(例如 C = ['A'、'B'、'C'、'D'])。该随机字符串的长度应为 N(例如 N = 32)。每个字符出现的频率应该相同 - 在该示例中为 8 次。
如何实现每个字符在这里出现的频率相同:
''.join(random.choice(C) for i in range(N))
或者有更好的方法吗?
如果您使用 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)