在 Python 中,如何通过一行代码来创建包含 n 个字符的字符串?

我需要在Python中生成一个n个字符的字符串。用现有的Python库是否可以实现这一点?例如,我需要一个10个字母的字符串:

string_val = 'abcdefghij'
244060 次浏览

前十个小写字母是string.lowercase[:10](当然,如果你之前已经导入了标准库模块string;-)。

其他“生成10个字符的字符串”的方法:'x'*10(所有10个字符都将是小写的xs;-), ''.join(chr(ord('a')+i) for i in xrange(10))(前10个小写字母),等等,等等;-)。

简单地重复同一个字母10次:

string_val = "x" * 10  # gives you "xxxxxxxxxx"

如果你想要一些更复杂的东西,比如n随机小写字母,它仍然只有一行代码(不包括import语句和定义n):

from random import choice
from string import ascii_lowercase
n = 10


string_val = "".join(choice(ascii_lowercase) for i in range(n))

如果你可以使用重复字母,你可以使用*操作符:

>>> 'a'*5


'aaaaa'

为什么是“一行”?你可以把任何东西放在一行上。

假设你想让它们以'a'开头,每次增加一个字符(换行> 26),下面是一行:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'

如果你只想要任何字母:

 'a'*10  # gives 'aaaaaaaaaa'

如果你想要连续的字母(最多26个):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'

这可能有点离题,但对于那些对生成字符串的随机性感兴趣的人来说,我的答案是:

import os
import string


def _pwd_gen(size=16):
chars = string.letters
chars_len = len(chars)
return str().join(chars[int(ord(c) / 256. * chars_len)] for c in os.urandom(size))

参见这些 答案random.py的源代码了解更多信息。