代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

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

  •  103
  • Thierry Lam  · 技术社区  · 15 年前

    我需要在python中生成一个包含n个字符的字符串。用现有的python库来实现这一点,是否只有一行答案?例如,我需要一个由10个字母组成的字符串:

    string_val = 'abcdefghij'
    
    6 回复  |  直到 6 年前
        1
  •  233
  •   Community CDub    6 年前

    简单地重复同一个字母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))
    
        2
  •  9
  •   Alex Martelli    15 年前

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

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

        3
  •  4
  •   Peter    15 年前

    如果您只想要任何信件:

     'a'*10  # gives 'aaaaaaaaaa'
    

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

     ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'
    
        4
  •  3
  •   John Millikin    15 年前

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

    假设您希望它们以“a”开头,并且每次递增一个字符(换行符为>26),下面是一行:

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

    如果可以使用重复的字母,则可以使用 * 操作员:

    >>> 'a'*5
    
    'aaaaa'
    
        6
  •  1
  •   foudfou    11 年前

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

    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))
    

    these answers random.py 更深入的信息来源。