【问题标题】:How can I increment a char?我怎样才能增加一个字符?
【发布时间】:2011-01-10 13:02:37
【问题描述】:

我是 Python 的新手,来自 Java 和 C。如何增加 char?在 Java 或 C 中,chars 和 int 实际上是可以互换的,并且在某些循环中,能够对 chars 进行增量以及按 chars 索引数组对我来说非常有用。

如何在 Python 中做到这一点?没有传统的 for(;;) 循环器已经够糟糕了 - 有什么方法可以实现我想要实现的目标,而无需重新考虑我的整个策略?

【问题讨论】:

  • 传统 for 循环:for i in range(50): do_something_with(i)。来吧,那还不错!!
  • @SilentGhost:我正在拆分一个英语词典,以便在 Android 应用程序中使用。因为单独的文件太大,我编写了一个 Python 脚本将它们拆分为 words_aa.txt、words_ab.txt 等...我需要编写第二个脚本来生成一个 Java 文件,其中包含一个包含 Id 的数组每个word文件的原始文件资源(因为我比较懒),想不出更好的办法。
  • 你似乎在寻找类似[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]的东西
  • @SilentGhost:这就是全部吗?要是说明书上说的就好了。

标签: python char increment


【解决方案1】:

检查这个:使用 FOR LOOP

for a in range(5):
    x='A'
    val=chr(ord(x) + a)
    print(val)

循环输出:A B C D E

【讨论】:

    【解决方案2】:

    对我来说,我将休闲作为一种测试。

    string_1="abcd"
    
    def test(string_1):
       i = 0
       p = ""
       x = len(string_1)
       while i < x:
        y = (string_1)[i]
        i=i+1
        s = chr(ord(y) + 1)
        p=p+s
    
       print(p)
    
    test(string_1)
    

    【讨论】:

    • 您使用了与已接受答案相同的逻辑,用类似的解决方案获得新答案有什么意义?
    • 我喜欢干净的代码,在本节中没有看到任何让我满意的解决方案,因此我投入了 2 美分。
    【解决方案3】:

    有一种方法可以使用string 包中的ascii_letters 增加字符,其中ascii_letters 是一个包含所有英文字母、大写和小写的字符串:

    >>> from string import ascii_letters
    >>> ascii_letters[ascii_letters.index('a') + 1]
    'b'
    >>> ascii_letters
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    

    也可以手动完成;

    >>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >>> letters[letters.index('c') + 1]
    'd'
    

    【讨论】:

      【解决方案4】:

      在 Python 2.x 中,只需使用 ordchr 函数:

      >>> ord('c')
      99
      >>> ord('c') + 1
      100
      >>> chr(ord('c') + 1)
      'd'
      >>> 
      

      Python 3.x 使这更加有条理和有趣,因为它在字节和 unicode 之间有明显的区别。默认情况下,“字符串”是 unicode,因此上述方法有效(ord 接收 Unicode 字符,chr 生成它们)。

      但是如果你对字节感兴趣(比如处理一些二进制数据流),事情就更简单了:

      >>> bstr = bytes('abc', 'utf-8')
      >>> bstr
      b'abc'
      >>> bstr[0]
      97
      >>> bytes([97, 98, 99])
      b'abc'
      >>> bytes([bstr[0] + 1, 98, 99])
      b'bbc'
      

      【讨论】:

      • @Tom R. 不要! [怀念过去的日子]。当您尝试快速实现某件事或转换一段代码时,Python 的概念和习语似乎只会阻碍您的进步,并且几乎不值得学习曲线......请耐心等待!您甚至可能会发现精通 Python 会改善您在 Java(和 C,在较小程度上)的风格。
      • 就像一个魅力。
        我要做的唯一更改是针对 z,在这种情况下,我分配了一个“a”。
      【解决方案5】:
      def doubleChar(str):
          result = ''
          for char in str:
              result += char * 2
          return result
      
      print(doubleChar("amar"))
      

      输出:

      aammaarr
      

      【讨论】:

        【解决方案6】:

        我来自 PHP,您可以在其中使用 ++ 运算符递增 char(A 到 B,Z 到 AA,AA 到 AB 等)。我做了一个简单的函数,它在 Python 中做同样的事情。您还可以将字符列表更改为您需要的任何字符(小写、大写等)。

        # Increment char (a -> b, az -> ba)
        def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
            # Unique and sort
            chlist = ''.join(sorted(set(str(chlist))))
            chlen = len(chlist)
            if not chlen:
                return ''
            text = str(text)
            # Replace all chars but chlist
            text = re.sub('[^' + chlist + ']', '', text)
            if not len(text):
                return chlist[0]
            # Increment
            inc = ''
            over = False
            for i in range(1, len(text)+1):
                lchar = text[-i]
                pos = chlist.find(lchar) + 1
                if pos < chlen:
                    inc = chlist[pos] + inc
                    over = False
                    break
                else:
                    inc = chlist[0] + inc
                    over = True
            if over:
                inc += chlist[0]
            result = text[0:-len(inc)] + inc
            return result
        

        【讨论】:

          【解决方案7】:

          “没有传统的 for(;;) looper 已经够糟糕了”??什么?

          你在尝试吗

          import string
          for c in string.lowercase:
              ...do something with c...
          

          或者您正在使用string.uppercasestring.letters

          Python 没有for(;;),因为通常有更好的方法来做到这一点。它也没有字符数学,因为它也不是必需的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-23
            • 2015-04-13
            • 1970-01-01
            • 1970-01-01
            • 2020-10-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多