如何增加一个字符?


103

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

如何在Python中执行此操作?没有传统的for(;;)循环程序就够了-我有什么方法可以在不重新考虑整个策略的情况下实现我想要的目标?


4
传统for循环: for i in range(50): do_something_with(i)。来吧,还算不错!
詹森主义2010年

@SilentGhost:我正在拆分一本英语词典,以便在Android应用程序中使用。由于该文件太大,因此我编写了一个Python脚本将其拆分为words_aa.txt,words_ab.txt等。每个单词文件的原始文件资源(因为我很懒),所以我想不出更好的方法。
Tom R

3
您似乎正在寻找类似的东西[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
SilentGhost,2010年

1
@SilentGhost:这就是全部吗?如果只是在手册中说的话。
Tom R

Answers:


178

在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'

5
@汤姆河。不要![错过过去]。当您尝试快速实现某些目标或转换一段代码时,Python的概念和习语似乎仅会阻碍您的进步,几乎不值得学习。您甚至可能会发现,精通Python会改善Java(和C)的风格(在较小程度上)。
mjv

像魅力一样运作。<br>我唯一要做的更改是对z进行更改,在这种情况下,我已分配了一个“ a”。
user45949 2014年

15

“足够糟糕,没有传统的for(;;)循环程序”?什么?

你想做吗

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

也许您正在使用string.uppercasestring.letters

Python没有,for(;;)因为通常有更好的方法来执行它。它也没有字符数学,因为也没有必要。


1
+1,用于尝试回答问题背后的问题(XY问题,依此类推)。如果可以的话,我会给你更多。
Devin Jeanpierre 2010年

谢谢。我经常首先问“为什么?” 对于这样的问题。但是@SilentGhost击败了我。
S.Lott

3

我来自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

2

有一种使用ascii_lettersfrom string包增加字符的方法,该包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'

1

检查一下:使用循环

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.