46 votos

¿Cómo puedo incrementar un char?

Soy nuevo en Python, vengo de Java y C. ¿Cómo puedo incrementar un char? En Java o C, los chars y los ints son prácticamente intercambiables, y en ciertos bucles, me resulta muy útil poder hacer incrementos de chars, e indexar arrays por chars.

¿Cómo puedo hacer esto en Python? Ya es bastante malo no tener un for(;;) looper tradicional - ¿hay alguna manera de conseguir lo que quiero lograr sin tener que repensar toda mi estrategia?

84voto

Eli Bendersky Puntos 82298

En Python 2.x, basta con utilizar la función ord y chr funciones:

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

Python 3.x hace esto más organizado e interesante, debido a su clara distinción entre bytes y unicode. Por defecto, una "cadena" es unicode, por lo que lo anterior funciona ( ord recibe los caracteres Unicode y chr los produce).

Pero si lo que te interesa son los bytes (por ejemplo, para procesar algún flujo de datos binarios), las cosas son aún más sencillas:

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

10voto

S.Lott Puntos 207588

¿"Ya es bastante malo no tener un for(;;) tradicional"? ¿Qué?

¿Estás tratando de hacer

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

O quizás esté utilizando string.uppercase o string.letters ?

Python no tiene for(;;) porque a menudo hay mejores maneras de hacerlo. Tampoco tiene matemáticas de carácter porque tampoco es necesario.

3voto

xpuu Puntos 108

Vengo de PHP, donde se pueden incrementar los caracteres (A a B, Z a AA, AA a AB etc.) usando el operador ++. Hice una función simple que hace lo mismo en Python. También puedes cambiar la lista de caracteres a lo que necesites (minúsculas, mayúsculas, 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

3voto

Moein Kameli Puntos 876

Hay una manera de aumentar el carácter utilizando ascii_letters de string paquete que ascii_letters es una cadena que contiene todo el alfabeto inglés, mayúsculas y minúsculas:

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

También se puede hacer manualmente;

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

2voto

Jaydeep_GAME Puntos 21

Comprueba esto: USANDO bucle for

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

SALIDA DEL BUCLE: A B C D E

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X