我有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))。但这将涉及很多行。
有一种简单的方法吗?
答案 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