1

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

4

3 回答 3

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

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

于 2013-05-29T06:28:13.233 回答
1

您有 62 个字符可供绘制。如果您尝试绘制更长的样本,则会出现异常。您可以将样本空间填充到至少必要的长度,如下所示:

chars = string.letters + string.digits
sample_space = chars*((100/len(chars))+1)
msg="".join(random.sample(sample_space, random.randint(5,100)))
于 2013-05-29T06:29:00.767 回答
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)])
于 2013-05-29T06:31:05.593 回答