在Python中,如何在一行代码中创build一个n个字符的string?

我需要在Python中生成一个包含n个字符的string。 是否有一个单行的答案来实现现有的Python库? 例如,我需要一个10个字母的string:

string_val = 'abcdefghij' 

简单地重复同样的信10次:

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

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

 from random import choice from string import lowercase n = 10 string_val = "".join(choice(lowercase) for i in range(n)) 

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

其他的方法来“做一个10个字符的string”: 'x'*10 (所有的十个字符将是小写x s ;-), ''.join(chr(ord('a')+i) for i in xrange(10)) (前10个小写字母再次)等等等等;-)。

为什么“一条线”? 你可以把任何东西放到一条线上。

假设你希望他们以'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' 

如果可以使用重复字母,则可以使用*运算符:

 >>> 'a'*5 'aaaaa' 

这可能有点偏离问题,但对于那些对生成的string的随机性感兴趣的人,我的答案是:

 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的来源为更多的见解。