重复像excel列这样的字母?

bla*_*ite 6 python string excel modulus

我想创建一个类似于Microsoft Excel中的列字母的字符串列表.例如,26列之后,接下来的列将成为AA,AB,AC,等.

我已经使用了模运算试过,但我刚刚结束了AA,BB,CC等...

import string

passes_through_alphabet = 0

for num, col in enumerate([_ for _ in range(40)]):
    if num % 26 == 0:
        passes_through_alphabet += 1
    excel_col = string.ascii_uppercase[num%26] * passes_through_alphabet
    print(num, excel_col)

0 A
1 B
2 C
3 D
...
22 W
23 X
24 Y
25 Z
26 AA
27 BB
28 CC
...
Run Code Online (Sandbox Code Playgroud)

Jos*_*ton 5

您可以为此使用itertools.product

>>> import itertools
>>> list(itertools.product(string.ascii_uppercase, repeat=2))
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ...
Run Code Online (Sandbox Code Playgroud)

将其与第一组字母结合在一起,并结合成对,将得到:

>>> list(
...     itertools.chain(
...         string.ascii_uppercase, 
...        (''.join(pair) for pair in itertools.product(string.ascii_uppercase, repeat=2))
... ))
['A', 'B', 'C', .. 'AA', 'AB', 'AC' .. 'ZZ']
Run Code Online (Sandbox Code Playgroud)

概括地说,我们定义了一个生成越来越大的产品的生成器。请注意,yield from仅在python 3.3+中可用,但是如果您在python 2上,则可以使用for循环生成每个项目。

 >>> def excel_cols():
...:     n = 1
...:     while True:
...:         yield from (''.join(group) for group in itertools.product(string.ascii_uppercase, repeat=n))
...:         n += 1

>>> list(itertools.islice(excel_cols(), 28))
['A',
 'B',
 'C',
 ...
 'X',
 'Y',
 'Z',
 'AA',
 'AB']
Run Code Online (Sandbox Code Playgroud)


Ole*_*nko 5

基于这个答案:https : //stackoverflow.com/a/182009/6591347

def num_to_excel_col(n):
    if n < 1:
        raise ValueError("Number must be positive")
    result = ""
    while True:
        if n > 26:
            n, r = divmod(n - 1, 26)
            result = chr(r + ord('A')) + result
        else:
            return chr(n + ord('A') - 1) + result
Run Code Online (Sandbox Code Playgroud)