如何在Python中生成一个随机字符串(长度仅为X,a-z)?
可能重复:如何在Python中生成一个随机字符串(长度仅为X,a-z)?,python,string,Python,String,可能重复: 如何在Python中生成长度为X a-z的字符串?如果不希望重复: ''.join(random.choice(string.lowercase) for x in range(X)) import string, random ''.join(random.sample(string.ascii_lowercase, X)) import string, random ''.join(random.choice(string.ascii_lowercase) for _ in
如何在Python中生成长度为X a-z的字符串?如果不希望重复:
''.join(random.choice(string.lowercase) for x in range(X))
import string, random
''.join(random.sample(string.ascii_lowercase, X))
import string, random
''.join(random.choice(string.ascii_lowercase) for _ in xrange(X)))
如果您确实想要(潜在)重复:
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
表示“依赖于语言环境的小写字母”,根据您当前的语言环境,可能包括重音字母或其他修饰的小写字母).生成器表达式的用法很好。但是,在我们节省内存的同时,最好使用xrange而不是range.CytokineStorm,与Python 3.x一样,range()
的行为与xrange()
相同。请记住,随机模块生成的任何序列都不是加密安全的。@Federico:除非您使用random.SystemRandom()
,这应该是加密安全的操作系统支持。在需要加密随机性的模块中,我经常这样做:import random
,random=random.SystemRandom()
用提供OS加密随机性的类的实例替换模块SystemRandom
是random.random
API,由os.Uradom
提供随机性,而不是Mersenne Twister(os.Uradom
由Window的CryptGenRandom
、类UNIX的/dev/Uradom
等支持)。仅供参考,string.lowercase
很少超过ASCII,但是根据我的经验,您设置了区域设置。我只是注意到“当前字母表”没有真正的变量。这两个代码示例都不意味着唯一性。这里有一个测试:@Altaisoft:您误解了sample
的工作原理。它只绘制一次给定的字符,但没有按顺序绘制。因此,abc
和cba
将是不同的输出。如果您假定sample
以原始字符串中出现的相同顺序返回它们,那么您的测试才有效(预计会有大量重叠),但由于它们可以以任何顺序出现,因此有(26+7)!/7!代码>选项;重叠不会很常见。@S.Lott我不明白,这不是堆栈溢出的本质吗?在帮助网站上抱怨似乎很奇怪。