【发布时间】:2010-12-29 18:15:00
【问题描述】:
可能重复:
python random string generation with upper case letters and digits
如何在 Python 中生成长度为 X a-z 的字符串?
【问题讨论】:
可能重复:
python random string generation with upper case letters and digits
如何在 Python 中生成长度为 X a-z 的字符串?
【问题讨论】:
''.join(random.choice(string.lowercase) for x in range(X))
【讨论】:
range() 的行为与 xrange() 相同。
random.SystemRandom(),否则它应该在操作系统支持的密码学上是安全的。在需要加密随机性的模块中,我经常这样做:import random、random = random.SystemRandom() 将模块替换为提供 OS 加密随机性的类的实例。 SystemRandom 是 random.Random API,随机性由 os.urandom 而不是 Mersenne Twister 提供(os.urandom 由 Window 的 CryptGenRandom、类 UNIX 的 /dev/urandom 等支持)。
如果你不想重复:
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,但是根据我的经验,您设置了语言环境。我只是注意到“当前字母表”没有真正的变量。
sample 的工作原理。它只绘制任何给定的字符一次,但它不是按顺序绘制的。所以abc 和cba 将是不同的输出。如果您假设 sample 以它们在原始字符串中出现的相同顺序返回它们,那么您的测试仅有效(预计会有大量重叠),但由于它们可以以任何顺序出现,所以有 (26+7)! / 7! 选项;重叠并不常见。