当我尝试生成大小为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的随机字符串? 还有为什么这个例外?
答案 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)])