2012-03-16 12 views
14

Puedo usar 'a' + 1 para obtener 'b' en lenguaje C, así que ¿cuál es la forma más conveniente de hacerlo en Python?
puedo escribirlo como:python: cómo generar char agregando int

chr(ord('a')+1) 

pero no sé si se trata de la mejor manera.

+4

que va a trabajar ¿Qué quiere decir con 'mejor' – zmbq

+1

se advirtió que las cuerdas en Python se almacenan con una codificación. En Python 2.x, la codificación predeterminada es ASCII a la que agregar un entero no debería ser un problema. En Python 3.x, las cadenas por defecto son UTF8 unicode. Obtendrás un er ror al agregar un entero a caracteres Unicode si se desborda más allá de 127. http://docs.python.org/howto/unicode.html#the-unicode-type – shimofuri

+1

@shimofuri, python 3 strings son Unicode. Utf-8 es una codificación. – alexis

Respuesta

15

Sí, esta es la mejor manera de Python no convierte automáticamente entre un personaje y un int la forma en C y C++ hacen

+0

No es una conversión, sino una semántica diferente (número entero, carácter) para el mismo patrón de bits almacenado. – alexis

+1

Aún así, existe el tipo de "bytearray", bastante conveniente cuando ne necesitas manipular caracteres por su valor. – jsbueno

7

Python no tiene realmente un tipo de carácter, a diferencia de C, por lo que sí, chr (ord es la manera de hacerlo.

Si quisiera hacerlo un poco más limpia, se podía hacer algo como :.

def add(c, x): 
    return chr(ord(c)+x) 
1

lo que está haciendo es realmente la manera correcta.. Python no combina un carácter con su punto de código numérico, como lo hacen C y otros idiomas similares. es que una vez que vas más allá de ASCII, el mismo valor integral puede representar diferentes caracteres, dependiendo de la codificación. C enfatiza el acceso directo a los formatos de hardware subyacentes, pero Python enfatiza la semántica bien definida.

2

No es el tipo bytearray en Python - es más lento que las cadenas normales, pero se comporta sobre todo como una cadena C: es mutable, acessing elementos inidividual plantean 0 - 255 números enteros, insetead de subseries con longitud 1, y puedes asignar a los elementos. Aún así, se representa como una cadena, y en Python 2, se puede utilizar en la mayoría de lugares de una cadena puede sin ser echado a un objeto str:

>>> text = bytearray("a") 
>>> text 
bytearray(b'a') 
>>> print text 
a 
>>> text[0]+=1 
>>> print text 
b 
>>> text[0] 
98 
>>> print "other_text" + text 
other_textb 

Al utilizar Python 3, para usar el contenido de un bytearray como un objeto de texto, sólo tiene que llamar a su método de decodificación con una codificación apropiado, como "latin1" o UTF-8" :.?

>>> print ("other_text" + text.decode("latin1"))