如何在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我不明白,这不是堆栈溢出的本质吗?在帮助网站上抱怨似乎很奇怪。