web-dev-qa-db-fra.com

Python: Comment puis-je incrémenter un personnage?

Je connais Python, venant de Java et de C. Comment incrémenter un caractère? En Java ou en C, les caractères et les entiers sont pratiquement interchangeables, et dans certaines boucles, il m'est très utile de pouvoir incrémenter des caractères et indexer des tableaux par des caractères. 

Comment puis-je faire cela en Python? C’est déjà assez grave de ne pas avoir un traditionnel pour (;;) looper. Y at-il un moyen de réaliser ce que je veux réaliser sans avoir à repenser toute ma stratégie?

Toute aide appréciée.

87
Tom R

Dans Python 2.x, utilisez simplement les fonctions ord et chr:

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

Python 3.x rend cela plus organisé et intéressant, en raison de sa distinction claire entre octets et unicode. Par défaut, une "chaîne" est unicode, donc ce qui précède fonctionne (ord reçoit les caractères Unicode et chr les produit).

Mais si les octets vous intéressent (comme pour le traitement de certains flux de données binaires), les choses sont encore plus simples:

>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
159
Eli Bendersky

"assez mauvais de ne pas avoir un traditionnel pour (;;) looper" ?? Quoi? 

Essayez-vous de faire 

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

Ou peut-être utilisez-vous string.uppercase ou string.letters?

Python n'a pas for(;;) car il existe souvent de meilleures façons de le faire. Il n’a pas non plus de maths de caractères car ce n’est pas nécessaire non plus.

13
S.Lott
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

sortie: 

aammaarr
0
Amar Tanwar

Je viens de PHP, où vous pouvez incrémenter char (A à B, Z à AA, AA à AB, etc.) en utilisant l'opérateur ++. J'ai créé une fonction simple qui fait la même chose en Python. Vous pouvez également modifier la liste des caractères en fonction de vos besoins (minuscules, majuscules, etc.).

# 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
0
xpuu