Ich arbeite an einem Projekt, das diese Funktionalität sehr häufig benötigt

'b' + 1 #=> 'a' and 'b' - 1 #=> 'a'

Jetzt ist meine Lösung sehr langweilig:

str(unichr((ord('b')+ 1))) 

Gibt es eine elegantere Möglichkeit, dies zu tun?

4
mko 9 Okt. 2012 im 13:38

5 Antworten

Beste Antwort

str(unichr(c)) kann durch nur chr(c) ersetzt werden.

Vereinfachte Version:

chr(ord('b') + 1)
5
Mark Byers 9 Okt. 2012 im 09:40

Definieren Sie Ihre eigene Funktion:

In [103]: def func(c,n):
    return chr(ord(c)+n)
   .....: 

In [105]: func('a',-1)
Out[105]: '`'

In [106]: func('b',-1)
Out[106]: 'a'

In [107]: func('c',2)
Out[107]: 'e'
5
Ashwini Chaudhary 9 Okt. 2012 im 09:41

Python ist stark typisiert und Betrachtungszeichenfolgen und Ints sind unterschiedlich und konvertieren nicht implizit in eine andere.

Ihr Code kann jedoch wahrscheinlich vereinfacht werden

chr(ord('b') + 1)

Wenn Sie es häufig verwenden, fügen Sie es in eine Funktion ein und sorgen Sie sich nicht mehr darum:

def incr_char(c, n):
    return chr(ord(c) + n)
1
madjar 9 Okt. 2012 im 09:41

Versuchen Sie stattdessen Folgendes:

>>> import string
>>> string.letters[string.letters.index('a')+1]
'b'

Nur für Ashwini:

>>> string.letters[string.letters.index('a')-1]
'Z'
0
Burhan Khalid 9 Okt. 2012 im 09:42

Sie können so etwas tun wie:

class char(unicode):
    def __add__(self, x):
        return char(unichr(ord(self) + x))

print char('a') + 1 # b
0
georg 9 Okt. 2012 im 09:43