Acabo de aprender Python 3 en 7 días, y tengo la sensación de que hay un pequeño hueco en mi comprensión de las cadenas de bytes. En Python 3, supongamos que tengo una cadena de bytes b'1234'
. Su iterador devuelve enteros:Python 3 bytes.index: ¿mejor forma?
Python 3.2.3 (default, May 26 2012, 18:49:27)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for z in b'1234':
... print(type(z))
...
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
puedo encontrar un número entero en la cadena de bytes (la definición de in
es que busca la igualdad):
>>> 0x32 in b'1234'
True
Sin embargo, me gustaría encontrar el índice de un entero dado en la cadena de bytes. bytes.index
requiere una subcadena:
>>> b'1234'.index(b'2')
1
Ahora, si tengo una variable x
que quiero encontrar, este es el mejor que he llegado con:
>>> x = 0x32
>>> b'1234'.index(bytes([x]))
1
Sé Python es más elegante que eso. Claramente me falta algo obvio. ¿Alguna idea sobre una forma más simple de hacer esto que no sea crear una secuencia de un solo entero? ¿O es eso realmente?
La pregunta detrás también es, ¿por qué quieres encontrar el índice del byte? – pepr
Si debe saber :) Es parte de una máquina virtual, una de cuyas instrucciones necesita el índice de un byte encontrado. Implementa la versión 3 de la especificación Z-machine, utilizada para jugar Zork y otras aventuras de texto basadas en ese motor. Si desea verificarlo, está en http://code.google.com/p/pyzmachine. Es mi primer esfuerzo, así que los puntos de mejora son apreciados. –