【问题标题】:In Python, how do I create a string of n characters in one line of code?在 Python 中,如何在一行代码中创建一个包含 n 个字符的字符串?
【发布时间】:2009-09-14 21:26:10
【问题描述】:

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

string_val = 'abcdefghij'

【问题讨论】:

  • 留下“一行代码”来进行代码混淆竞赛。当一个问题的解决方案自然地写成一行时,它将是;否则不应该。将其用作自己的目标是通往讨厌代码的保证途径。
  • 当然,除非这是家庭作业。在这种情况下,请留下“一行代码”,但要诚实并包含 [homework] 标签。
  • 这实际上不是一个家庭作业问题,我只需要在我的测试脚本中输入一个长度为 n 的字符串。我忘了在Python中,一个char可以乘以n,其中n是一个正整数来实现我想要的。

标签: python string


【解决方案1】:

简单地重复同一个字母 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】:

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

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

    【讨论】:

    • 在 Python 3.1.1 中,实际上是 string.ascii_lowercase。
    • 是的,python 3 删除了 .lowercaseascii_lowercase 在最近的 Python 2 和 Python 3 中都是如此)。
    【解决方案3】:

    如果你只想要任何字母:

     'a'*10  # gives 'aaaaaaaaaa'
    

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

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

    【讨论】:

      【解决方案4】:

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

      假设您希望它们以 'a' 开头,并且每次增加一个字符(换行 > 26),这里有一行:

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

      【讨论】:

      • 你可以将任何东西放入一行,是吗?相当的主张,回复:Python :)
      • Gregg:Python 允许使用分号作为语句分隔符,因此您可以根据需要将整个程序放在一行中。
      • 您不能使用分号进行任意流量控制。例如嵌套循环。
      【解决方案5】:

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

      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 answersrandom.py 的来源了解更多信息。

      【讨论】:

        【解决方案6】:

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

        >>> 'a'*5
        
        'aaaaa'
        

        【讨论】:

          猜你喜欢
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2012-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多