Je viens d'apprendre Python 3 en 7 jours, et j'ai l'impression qu'il y a un petit trou dans ma compréhension des chaînes d'octets. En Python 3, supposons que j'ai une chaîne d'octets b'1234'
. Son iterator retourne des entiers:Python 3 bytes.index: meilleur moyen?
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'>
je peux trouver un entier dans la chaîne d'octets (la définition de in
est qu'il recherche pour l'égalité):
>>> 0x32 in b'1234'
True
Cependant, je voudrais trouver l'index d'un entier donné dans la chaîne d'octets. bytes.index
nécessite une sous-chaîne:
>>> b'1234'.index(b'2')
1
Maintenant, si j'ai une x
variable que je veux trouver, c'est le meilleur que je suis venu avec:
>>> x = 0x32
>>> b'1234'.index(bytes([x]))
1
Je sais que Python est plus élégant que ça. Il me manque clairement quelque chose d'évident. Des idées sur une façon plus simple de le faire autre que de créer une séquence d'un seul entier? Ou est-ce vraiment ça?
La question derrière est également, pourquoi voulez-vous trouver l'index de l'octet? – pepr
Si vous devez savoir :) Il fait partie d'une machine virtuelle, dont l'une des instructions a besoin de l'indice d'un octet trouvé. Il implémente la version 3 de la spécification Z-machine, utilisée pour jouer à Zork et d'autres aventures textuelles basées sur ce moteur. Si vous voulez vérifier, c'est sur http://code.google.com/p/pyzmachine. C'est mon premier effort, donc les points d'amélioration sont appréciés. –