还有一种将excel样式的列转换为数字(以1开头)的更pythonic的方法吗?
工作代码最多两个字母:
def column_to_number(c): """Return number corresponding to excel-style column.""" number=-25 for l in c: if not l in string.ascii_letters: return False number+=ord(l.upper())-64+25 return number
代码运行:
>>> column_to_number('2') False >>> column_to_number('A') 1 >>> column_to_number('AB') 28
三个字母不起作用。
>>> column_to_number('ABA') 54 >>> column_to_number('AAB') 54
有一种方法可以使其变得更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])