不想太基础,但这个:
>>> 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']
这与下面的内容非常不同:
>>> 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']
第一个没有逗号和你在问题中提到的内容,它是一个包含一个26个元素字符串的单元素列表。第二个是一个包含26个单个字符的元素列表。
如果您打印每个:
>>> 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
很明显,将
char1
的各个字符转换为
可迭代对象需要额外的步骤。
如果您有由字符'a'到'z'和/或'A'到'Z'组成的
序列,可以轻松地使用
列表推导式返回每个字符的编号。
>>> [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]
针对您所拥有的数据结构类型,您需要首先访问字符串:
>>> [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]
如果您的代码清单与您的问题中的相同,那可能就是您的问题所在。
一个合理的替代方案是:[ord(x.lower())-96 for x in char1[0]]
您可以看到,您的characters=['a''b''c'...]
,没有逗号,就像在列表中输入字符串中所有字符一样,例如 ['abc...']
。
现在请尝试:
>>> import string
>>> [ord(x.lower())-96 for x in string.letters]
[1,2,...26, 1,2,3...26]
>>> char3=[string.letters]
>>> [ord(x)%32 for x in char3[0]]
>>> [ord(x)%32 for x in [string.letters][0]]
'ab' == '12' == 'l'
。在你的 pastebin 代码中,maketrans 接受一个字母到字母映射的字符串,例如 'abcd'、'1234'。这不支持两位数。 - kevpiefrom string import ascii_lowercase
然后在另一行中 -LETTERS = {letter: str(index) for index, letter in enumerate(ascii_lowercase, start=1)}
- Dipen Gajjar