Convert alphabet letters to number in Python

后端 未结 16 1820
慢半拍i
慢半拍i 2020-11-28 05:09

How can the following be finished?

characters = [\'a\'\'b\'\'c\'\'d\'\'e\'\'f\'\'g\'\'h\'\'i\'\'j\'\'k\'\'l\'\'m\'\'n\'\'o\'\'p\'\'q\'\'r\'\'t\'\'u\'\'v\'\'w         


        
16条回答
  •  旧时难觅i
    2020-11-28 05:32

    Not to be too basic, but this:

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

    is very different than this:

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

    The first, without commas and what you have in your question, is a one element list with a 26 element string. The second is a 26 element list each a single character in length.

    If you print each:

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

    It becomes apparent that it takes an additional step to turn the individual characters of char1 into an iterable.

    If you have the sequence of characters 'a' through 'z' and/or 'A' through 'Z', you can easily return the number of the character with list comprehension:

    >>> [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]
    

    For the type of data structure you have, you need to access the string first:

    >>> [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]
    

    So if your code listing is the same as in your question, that may be your issue.

    A reasonable alternative is: [ord(x.lower())-96 for x in char1[0]]

    You can see that your characters=['a''b''c'...], without the commas, is just the same as typing all the characters in a string in a list like this ['abc...'].

    So now try:

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

提交回复
热议问题