首页 > 解决方案 > 将 23AC 等坐标转换为 (x,y)

问题描述

我有格式为 XXYY 的坐标矩阵,其中 XX 和 YY 是数字(0 到 10,000),但 Y 用字母表示(A = 1、B = 2、AA = 27 等等)。

点 = [“2B”、“29AA”、“18F”、“5AG”]

我怎样才能把它转换成类似的东西?

xy_points = [(2, 2), (29, 27), (18, 6), (5, 33)]

我的第一个想法是使用 int() 和 ord(),但是当 Y 坐标超过一个字母(AZ、AE、BE)时,事情会变得复杂。

A = ["1", "2", "3", "B"]
C = [list(map(lambda x: int(x) if x.isdigit() else ord(x) - 64, A))]
print(C)

我知道我可以一个字母一个字母地得到字符串,并使用基数 26 将其转换为整数。(即对于 AG 将是 (ord("A") - 64) * 26 + (ord("G") - 64)) . 但这将涉及很多行。

有没有一种简单的方法可以做到这一点?

标签: python-3.xmatrixcasting

解决方案


像这样的递归函数会:

def y(s):
    if len(s) == 1:
        return ord(s[0]) - ord('A') + 1
    return y(s[-1]) + 26 * y(s[:-1])
print(y('B'), y('AA'), y('F'), y('AG'), y('AA'), y('BA'), y('ZZ'), y('AAA'))

这输出:

2 27 6 33 27 53 702 703

推荐阅读