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

210
我需要在Python中生成一个包含n个字符的字符串。是否有一行代码可以使用现有的Python库实现此目的?例如,我需要一个由10个字母组成的字符串:
string_val = 'abcdefghij'

28
将“一行代码”留给代码混淆竞赛。当解决问题的方案自然而然地可以写成一行时,它就会被写成一行;否则就不应该这样做。将其作为一个目标并追求它会导致糟糕的代码。请记住,代码的可读性比简洁性更重要。 - Glenn Maynard
4
当然,除非这是一份作业。如果是作业的话,请保留“只用一行代码”的要求,但诚实地标上[作业]标签。 - S.Lott
6
这实际上不是一道家庭作业问题,我只是需要在我的测试脚本中使用一个长度为n的字符串。我忘了在Python中,可以通过将一个字符乘以正整数n来实现我想要的效果。 - Thierry Lam
请参考此链接:https://dev59.com/7HA75IYBdhLWcg3wRWoU#3391106 - DigviJay Patil
6个回答

417

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

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

如果你希望得到更复杂的结果,例如n个随机小写字母,那也只需要一行代码(不包括导入语句和定义n):

from random import choice
from string import ascii_lowercase
n = 10

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

14

前十个小写字母是string.lowercase[:10](如果您之前导入了标准库模块string的话;-)。

其他创建长度为10的字符串的方法包括:'x'*10(这个字符串中所有的字符都是小写的x);''.join(chr(ord('a')+i) for i in xrange(10))(再次是前十个小写字母)等等,等等;-)。


6
在Python 3.1.1中,它实际上是string.ascii_lowercase。 - Lasse V. Karlsen
2
是的,Python 3 移除了 .lowercaseascii_lowercase 在最近的 Python 2 和 Python 3 中都有)。 - Alex Martelli

7

如果您只想要任何字母:

 'a'*10  # gives 'aaaaaaaaaa'

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

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

5

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

假设你想让它们以字母“A”开头,并每次增加一个字符(超过26个后循环),这是一行代码:

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

2
你可以把任何东西都放在一行里,是吗?这是相当大的一个说法,关于Python :) - Gregg Lind
6
Gregg说:Python允许使用分号作为语句分隔符,因此如果需要的话,你可以将整个程序放在一行上。 - John Millikin
2
你不能使用分号进行任意流程控制。例如,无法嵌套循环。 - recursive

4
这可能与问题有些偏差,但对于那些对生成的字符串随机性感兴趣的人,我的答案是:
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的源代码,以获取更多见解。


3
如果您需要重复使用字母,可以使用*运算符:
>>> 'a'*5

'aaaaa'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接