111

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

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

4

7 回答 7

189

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

>>> 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'
于 2010-01-28T18:28:50.710 回答
16

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

你想做什么

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

或者也许你正在使用string.uppercaseor string.letters

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

于 2010-01-28T18:38:50.560 回答
5

检查这个:使用循环

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

循环输出:ABCDE

于 2020-04-08T14:30:53.843 回答
4

我来自 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
于 2017-05-07T15:01:09.133 回答
3

有一种方法可以使用ascii_lettersfromstring包增加字符,该包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'
于 2019-12-16T12:22:08.563 回答
0
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

输出:

aammaarr
于 2019-01-17T03:59:44.940 回答
-1

对我来说,我把休耕作为测试。

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)
于 2020-10-14T14:47:29.497 回答