【问题标题】:How do I generate a random string (of length X, a-z only) in Python? [duplicate]如何在 Python 中生成随机字符串(长度为 X,仅 a-z)? [复制]
【发布时间】:2010-12-29 18:15:00
【问题描述】:

可能重复:
python random string generation with upper case letters and digits

如何在 Python 中生成长度为 X a-z 的字符串?

【问题讨论】:

    标签: python string


    【解决方案1】:
    ''.join(random.choice(string.lowercase) for x in range(X))
    

    【讨论】:

    • 很好地使用了生成器表达式。但是在我们节省内存的同时,还不如使用 xrange 而不是 range。
    • CytokineStorm,从 Python 3.x 开始,range() 的行为与 xrange() 相同。
    • 请记住,随机模块生成的任何序列都不是加密安全的。
    • @Federico:除非您使用random.SystemRandom(),否则它应该在操作系统支持的密码学上是安全的。在需要加密随机性的模块中,我经常这样做:import randomrandom = random.SystemRandom() 将模块替换为提供 OS 加密随机性的类的实例。 SystemRandomrandom.Random API,随机性由 os.urandom 而不是 Mersenne Twister 提供(os.urandom 由 Window 的 CryptGenRandom、类 UNIX 的 /dev/urandom 等支持)。
    【解决方案2】:

    如果你不想重复:

    import string, random
    ''.join(random.sample(string.ascii_lowercase, X))
    

    如果你确实想要(潜在的)重复:

    import string, random
    ''.join(random.choice(string.ascii_lowercase) for _ in xrange(X)))
    

    这是假设 a-z 的意思是“ASCII 小写字符”,否则您的字母表在这些表达式中的表达方式可能不同(例如,string.lowercase 表示“依赖于区域设置的小写字母”,其中可能包括重音或其他修饰的小写字母取决于您当前的语言环境)。

    【讨论】:

    • 仅供参考,string.lowercase 很少超过 ASCII,但是根据我的经验,您设置了语言环境。我只是注意到“当前字母表”没有真正的变量。
    • 这些代码示例都不意味着唯一性。这是一个测试:pastie.org/8619409
    • @Altaisoft:你误解了sample 的工作原理。它只绘制任何给定的字符一次,但它不是按顺序绘制的。所以abccba 将是不同的输出。如果您假设 sample 以它们在原始字符串中出现的相同顺序返回它们,那么您的测试仅有效(预计会有大量重叠),但由于它们可以以任何顺序出现,所以有 (26+7)! / 7! 选项;重叠并不常见。
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2018-01-06
    • 2015-09-13
    • 2016-11-02
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多