首页 > 解决方案 > 用字母“配对”或“匹配”数字

问题描述

我正在尝试将字母“AZ”上的字母与数字 1-26 和数字 0-9 与 48-57 匹配。我知道我可以用 ASCII 表完成字母部分,但我想知道 Python 中是否有一种快速或简单的方法来定义这种行为:

这个想法是能够传递一个数字列表 (List2) 并在 List1 上返回它们的对应项。

这是为了对 ADS-B 数据进行解码以进行平面识别。更多信息在这里

标签: pythonpython-3.x

解决方案


定义一个字母和数字的列表(为了便于理解,我们称之为 List1)。

>>> import string
>>> list1 = string.ascii_uppercase + string.digits
>>> list1
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

定义一个数字列表 (List2)。

我正在尝试将字母“AZ”上的字母与数字 1-26 和数字 0-9 与 48-57 匹配。

>>> list2 = list(range(1,27))+list(range(48,58))
>>> list2
[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, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]

将第一个列表中的每个项目与第二个列表中相同位置的项目分配。

这将创建一个数字到字符的字典:

>>> table = dict(zip(list2,list1))
>>> table
{1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L', 13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q', 18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V', 23: 'W', 24: 'Y', 25: 'X', 26: 'Z', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9'}

这个想法是能够传递一个数字列表 (List2) 并在 List1 上返回它们的对应项。

>>> def lookup(L):
...    return ''.join([table[x] for x in L])
...
>>> lookup([1,2,3,48,49])
'ABC01'

推荐阅读