将23AC之类的坐标转换为(x,y)

时间:2018-07-11 06:07:41

标签: python-3.x matrix casting

我有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))。但这将涉及很多行。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:3)

这样的递归函数可以做到:

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