Je ne veux pas être trop basique, mais ça :
>>> char1 = ['a''b''c''d''e''f''g''h''i''j''k''l'
'm''n''o''p''q''r''s''t''u''v''w''x''y''z']
est très différente de celle-ci :
>>> char2 = ['a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x','y','z']
La première, sans virgule et ce que vous avez dans votre question, est une liste d'un élément avec une chaîne de 26 éléments. La seconde est une liste de 26 éléments, chacun d'entre eux étant composé d'un seul caractère.
Si vous imprimez chaque :
>>> print char1, len(char1), len(char1[0])
['abcdefghijklmnopqrstuvwxyz'] 1 26
>>> print char2, len(char2), len(char2[0])
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 26 1
Il devient évident qu'il faut une étape supplémentaire pour transformer les personnages individuels de char1
dans un itérable .
Si vous avez le séquence de caractères 'a' à 'z' et/ou 'A' à 'Z', vous pouvez facilement retourner le numéro du caractère avec compréhension de la liste :
>>> [ord(x)%32 for x in char2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
Pour le type de structure de données que vous avez, vous devez d'abord accéder à la chaîne de caractères :
>>> [ord(x)%32 for x in char1[0]]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
Donc, si votre liste de codes est la même que dans votre question, cela peut être votre problème.
Une alternative raisonnable est : [ord(x.lower())-96 for x in char1[0]]
Vous pouvez voir que votre characters=['a''b''c'...]
sans les virgules, c'est la même chose que de taper tous les caractères d'une chaîne de caractères dans une liste comme ceci ['abc...']
.
Alors maintenant, essayez :
>>> import string
>>> [ord(x.lower())-96 for x in string.letters]
[1,2,...26, 1,2,3...26] # my ellipses
>>> char3=[string.letters] # one string as element[0]
>>> [ord(x)%32 for x in char3[0]]
>>> [ord(x)%32 for x in [string.letters][0]]
3 votes
Qu'est-ce que vous avez jusqu'à présent, et en quoi ça ne marche pas ?
0 votes
Celui-ci fonctionne : pastebin.com/SYwgcpg8 mais quand j'augmente les chiffres, ça ne marche pas, je ne connais pas d'autres moyens :S
3 votes
Juste une remarque, il manque une lettre et deux chiffres dans votre liste... :P Vous devriez toujours essayer d'éviter de construire de longues listes comme celle-ci à la main. Il y a de meilleures façons de le faire :) (ex : import string ; letters = string.lowercase)
3 votes
Ces listes n'ont pas de virgules.
1 votes
Que voulez-vous réellement pour la sortie, veuillez montrer un exemple ? Parce que
'ab' == '12' == 'l'
. Dans votre code pastebin, maketrans prend une chaîne de lettres en correspondance avec des lettres comme 'abcd', '1234'. Ceci ne supportera pas les nombres à 2 chiffres.0 votes
Vous n'avez pas besoin d'écrire manuellement les lettres et leurs alphabets respectifs. Vous pouvez écrire :
from string import ascii_lowercase
Puis dans une autre ligne -LETTERS = {letter: str(index) for index, letter in enumerate(ascii_lowercase, start=1)}