【问题标题】:Convert numbers into corresponding letter using Python使用 Python 将数字转换为对应的字母
【发布时间】:2014-06-05 15:44:06
【问题描述】:

我想知道是否可以将数字转换为相应的字母值。所以

1 -> a
2 -> b

我打算制作一个程序,列出用户指定长度的所有可能的字母组合。

看看我知道如何构建程序的其余部分,除了这个! 任何帮助都会很棒。

【问题讨论】:

  • 1a是如何对应的?
  • 如果数字是27应该输出什么?

标签: python python-3.x numerical alphabetical


【解决方案1】:

大写字母:

chr(ord('@')+number)

1 -> 一个

2 -> 乙

...

小写字母:

chr(ord('`')+number)

1 -> 一个

2 -> b

...

【讨论】:

  • 谢谢!对于其他人的熊猫映射,我这样做了:df['number_col'] = df['number_col'].astype(int).apply(lambda x: chr(ord('`')+x))
【解决方案2】:
import string
for x, y in zip(range(1, 27), string.ascii_lowercase):
    print(x, y)

import string
for x, y in enumerate(string.ascii_lowercase, 1):
    print(x, y)

for x, y in ((x + 1, chr(ord('a') + x)) for x in range(26)):
    print(x, y)

以上所有解决方案都输出英文字母中的小写字母及其位置:

1 a
...
26 z

您将创建一个字典,以便通过位置(键)轻松访问字母(值)。例如:

import string
d = dict(enumerate(string.ascii_lowercase, 1))
print(d[3]) # c

【讨论】:

    【解决方案3】:

    字典呢?

    >>> import string
    >>> num2alpha = dict(zip(range(1, 27), string.ascii_lowercase))
    >>> num2alpha[2]
    b
    >>> num2alpha[25]
    y
    

    但不要超过 26:

    >>> num2alpha[27]
    KeyError: 27
    

    但是,如果您要查找给定长度的所有字母组合:

    >>> import string
    >>> from itertools import combinations_with_replacement as cwr
    >>> alphabet = string.ascii_lowercase
    >>> length = 2
    >>> ["".join(comb) for comb in cwr(alphabet, length)]
    ['aa', 'ab', ..., 'zz']
    

    【讨论】:

      【解决方案4】:

      您可以使用chr()将数字转换为字符,但您需要使用更高的起点,因为ASCII表中首先还有其他几个字符。

      ord('a') - 1为起点:

      start = ord('a') - 1
      a = chr(start + 1)
      

      演示:

      >>> start = ord('a') - 1
      >>> a = chr(start + 1)
      >>> a
      'a'
      

      另一种选择是使用string.ascii_lowercase constant 作为序列,但您需要从开始索引:

      import string
      
      a = string.ascii_lowercase[0]
      

      【讨论】:

        【解决方案5】:

        尝试 dict 和一些递归:

        def Getletterfromindex(self, num):
            #produces a string from numbers so
        
            #1->a
            #2->b
            #26->z
            #27->aa
            #28->ab
            #52->az
            #53->ba
            #54->bb
        
            num2alphadict = dict(zip(range(1, 27), string.ascii_lowercase))
            outval = ""
            numloops = (num-1) //26
        
            if numloops > 0:
                outval = outval + self.Getletterfromindex(numloops)
        
            remainder = num % 26
            if remainder > 0:
                outval = outval + num2alphadict[remainder]
            else:
                outval = outval + "z"
            return outval
        

        【讨论】:

          【解决方案6】:

          这是一个快速的解决方案:

          # assumes Python 2.7
          OFFSET = ord("a") - 1
          
          def letter(num):
              return chr(num + OFFSET)
          
          def letters_sum_to(total):
              for i in xrange(1, min(total, 27)):
                  for rem in letters_sum_to(total - i):
                      yield [letter(i)] + rem
              if total <= 26:
                  yield [letter(total)]
          
          def main():
              for letters in letters_sum_to(8):
                  print("".join(letters))
          
          if __name__=="__main__":
              main()
          

          产生

          aaaaaaaa
          aaaaaab
          aaaaaba
          aaaaac
          aaaabaa
          aaaabb
          aaaaca
          aaaad
          aaabaaa
          # etc
          

          请注意,总共为 N 的解决方案的数量是 2**(N-1)。

          【讨论】:

            【解决方案7】:
            for i in range(0, 100):
                 mul = 1
                 n   = i
                 if n >= 26:
                     n   = n-26
                     mul = 2
                 print chr(65+n)*mul
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-24
              • 2021-05-30
              • 2011-05-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多