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


148

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

string_val = 'abcdefghij'

23
留下“一行代码”即可进行代码混淆竞赛。当问题的解决方案自然地写成一行时,它将是;否则不应该。将其用作自己的目标是保证获得讨厌代码的途径。
格伦·梅纳德

3
当然,除非这是家庭作业。在这种情况下,请保留“仅一行代码”,但要诚实,并包含[homework]标签。
S.Lott

5
实际上这不是一个家庭作业问题,我只需要在测试脚本中输入一个长度为n的字符串即可。我忘记了在Python中,可以将char乘以n,其中n是一个正整数,可以实现我想要的功能。
Thierry Lam

Answers:


310

要将同一字母重复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))

9

前十个小写字母为string.lowercase[:10](当然,如果您string先前已导入标准库模块,则为-)。

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


6
在Python 3.1.1中,它实际上是string.ascii_lowercase。
Lasse V. Karlsen

1
是的,删除了python 3 .lowercaseascii_lowercase在最近的Python 2 和python 3中均已删除)。
亚历克斯·马丁里

5

如果您只需要任何字母:

 'a'*10  # gives 'aaaaaaaaaa'

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

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

3

为什么要“一行”?您可以将任何东西放在一行上。

假设您希望它们以“ a”开头,并且每次增加一个字符(环绕> 26),则显示以下一行:

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

2
您可以将任何内容放入一行中,是吗?颇有
Gregg Lind

6
Gregg:Python允许使用分号作为语句定界符,因此您可以根据需要将整个程序放在一行上。
约翰·米利金

2
但是,您不能使用分号进行任意流控制。例如嵌套循环。
递归

3

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

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的资料以获取更多见解。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.