在python中生成大小为100或更大的随机字符串

时间:2013-05-29 06:24:25

标签: python string exception random size

当我尝试生成大小为100或更大的随机字符串时,它会让我异常......

msg="".join(random.sample(string.letters+string.digits,random.randint(5,100)))

Exception:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/random.py", line 316, in sample
    raise ValueError, "sample larger than population"
ValueError: sample larger than population

你能帮我解释一下如何生成一个大于100的随机字符串? 还有为什么这个例外?

3 个答案:

答案 0 :(得分:3)

len(string.digits + string.letters) = 62.

random.sample函数不会对替换进行采样,因此它不能对此列表中的62个元素进行采样。您可能想尝试使用列表推导的方法。

答案 1 :(得分:1)

你有62个字符可供绘制。如果您尝试绘制更长的样本,您将获得异常。您可以将样本空间填充到至少所需的长度,如下所示:

chars = string.letters + string.digits
sample_space = chars*((100/len(chars))+1)
msg="".join(random.sample(sample_space, random.randint(5,100)))

答案 2 :(得分:1)

random.sample给出了一个子集。

针对您的问题的一个非常不优化的解决方案可能是:http://codebunk.com/bunk#-IviyCJW-nmi8Lr0q_74

import random
import string

print ''.join([random.choice(string.letters+string.digits) for e in range(100)])