有一种方法可以使其变得更pythonic(可使用三个或更多字母,并使用较少的幻数):
def col2num(col):
num = 0
for c in col:
if c in string.ascii_letters:
num = num * 26 + (ord(c.upper()) - ord('A')) + 1
return num
并且作为使用reduce的单行代码(不检查输入并且可读性较低,所以我不推荐这样做):
col2num = lambda col: reduce(lambda x, y: x*26 + y, [ord(c.upper()) - ord('A') + 1 for c in col])