【问题标题】:Sequence of letters in PythonPython中的字母序列
【发布时间】:2012-10-01 21:19:05
【问题描述】:

Python中是否有内置的方法/模块来生成字母,例如R中的内置常量LETTERS或字母常量?

R 内置常量作为letters[n] 工作,如果n = 1:26 则生成字母表中的小写字母。

谢谢。

【问题讨论】:

    标签: python r letters


    【解决方案1】:

    另一种方法可以直接给你一个字符串:

    >>> bytearray(range(97,123)).decode("utf-8")
    u'abcdefghijklmnopqrstuvwxyz'
    

    (python2和python3都可以用,当然如果是python 3的话u前缀是不可见的)

    如果这是您喜欢的,您显然可以将该字符串转换为其他答案中的列表,例如:

    >>> [x for x in bytearray(range(97,123)).decode("utf-8")]
    ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    

    也很容易改成随机选择n个字母(允许重复):

    >>> import random
    >>> n = 10
    >>> bytearray(random.randint(97, 122) for x in range(n)).decode('utf-8')
    'qdtdlrqidx'
    

    或不重复:

    >>> import random
    >>> n = 10
    >>> bytearray(random.sample(range(97, 123),n)).decode('utf-8')
    'yjaifemwbr'
    

    【讨论】:

      【解决方案2】:

      通过上面的列表推导和参考,还有另一种方法:

      >>> [chr(x) for x in range(97, 123)]
      ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
      

      【讨论】:

        【解决方案3】:

        它叫string.ascii_lowercase

        如果你想选择 n 个随机的小写字母,那么:

        from string import ascii_lowercase
        from random import choice
        
        letters = [choice(ascii_lowercase) for _ in range(5)]
        

        如果您希望将其作为字符串而不是列表,请使用 str.join:

        letters = ''.join([choice(ascii_lowercase) for _ in range(5)])
        

        【讨论】:

        • 在撰写未发表的答案时,我在剪贴板上有链接 :)
        • @Tichodroma, @jon-clements - 谢谢。这很好。我可以轻松地将序列传递给它,例如string.ascii_letters[1:5]。但是,有没有办法生成一系列随机字母,这些字母是从产生 0 到 26 之间的随机整数的表达式中计算出来的?当我尝试使用来自 string.ascii_letters[np.random.randint(0,26,10)] 的数组结果时,它告诉我只能将一个元素转换为索引。
        • @John -- 使用 random.sample(string.ascii_letters,5)
        • 更一般地说,当 R 被神奇地向量化时,Python 倾向于使用“列表理解”。
        • @John 我会选择[random.choice(string.ascii_letters) for _ in range(5)] 但我想如果你想使用numpy 来生成数字然后索引到列表中就可以了:)
        【解决方案4】:

        您可以使用map,如下所示:

        >>> map(chr, range(65, 91))
        ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
        >>> map(chr, range(97, 123))
        ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
        >>> a = map(chr, range(65, 70))
        >>> a
        ['A', 'B', 'C', 'D', 'E']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 2015-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          相关资源
          最近更新 更多