【问题标题】:Generating random string of size 100 or more in python在python中生成大小为100或更大的随机字符串
【发布时间】:2013-05-29 06:24:24
【问题描述】:

当我尝试生成大小为 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 的随机字符串吗? 还有为什么会出现这个异常?

【问题讨论】:

  • 取决于你想比100高多少...

标签: python string exception random size


【解决方案1】:
len(string.digits + string.letters) = 62.

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这会输出一个字符串,其中每个字母和数字最多出现两次——这是一个可能但不寻常的要求。
    • 是的,但在所有字符只采样一次之前,所以我认为这将是一个自然的扩展
    【解决方案3】:

    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)])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2019-02-07
      • 2018-07-23
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多