如何制作连续的字母列表python(从a-z然后从aa,ab,ac等)

时间:2015-03-30 16:31:54

标签: python excel enumerate

我想为类似于excel工作表的应用程序创建一个按字母顺序排列的列表。

用户会输入多个单元格,我想生成列表。 例如,用户需要54个单元格。然后我会生成

'a','b','c',...,'z','aa','ab','ac',...,'az','ba','bb'

我可以从[ref]

生成列表
 from string import ascii_lowercase
 L = list(ascii_lowercase) 

我如何将它拼接在一起? PHP的类似问题已被问到here。有人有python等价吗?

6 个答案:

答案 0 :(得分:22)

使用itertools.product

from string import ascii_lowercase
import itertools

def iter_all_strings():
    for size in itertools.count(1):
        for s in itertools.product(ascii_lowercase, repeat=size):
            yield "".join(s)

for s in iter_all_strings():
    print(s)
    if s == 'bb':
        break

结果:

a
b
c
d
e
...
y
z
aa
ab
ac
...
ay
az
ba
bb

这远远超出了双字母组合的额外好处。如果你需要一百万个字符串,它会愉快地给你三个,四个和五个字母串。


奖励风格提示:如果您不喜欢在底部循环中使用明确的break,则可以使用islice使循环自行终止:

for s in itertools.islice(iter_all_strings(), 54):
    print s

答案 1 :(得分:1)

您可以使用列表理解。

from string import ascii_lowercase
L = list(ascii_lowercase) + [letter1+letter2 for letter1 in ascii_lowercase for letter2 in ascii_lowercase]

答案 2 :(得分:1)

关注@Kevin的回答:

from string import ascii_lowercase
import itertools

# define the generator itself
def iter_all_strings():
    size = 1
    while True:
        for s in itertools.product(ascii_lowercase, repeat=size):
            yield "".join(s)
        size +=1

下面的代码可以生成字符串,例如,可用于生成唯一标签。

# define the generator handler
gen = iter_all_strings()
def label_gen():
    for s in gen:
        return s

# call it whenever needed
print label_gen()
print label_gen()
print label_gen()

答案 3 :(得分:0)

我最终做了自己的事。 我认为它可以创建任意数量的字母。

def AA(n, s):
    r = n % 26
    r = r if r > 0 else 26
    n = (n - r) / 26
    s = chr(64 + r) + s

    if n > 26: 
        s = AA(n, s)
    elif n > 0:
        s = chr(64 + n) + s

    return s

n = quantity | r = remaining (26 letters A-Z) | s = string

要打印列表:

def uprint(nc):
    for x in range(1, nc + 1):
        print AA(x,'').lower()

在转换为python之前使用过VBA:

Function AA(n, s)

    r = n Mod 26
    r = IIf(r > 0, r, 26)
    n = (n - r) / 26
    s = Chr(64 + r) & s

    If n > 26 Then
        s = AA(n, s)
    ElseIf n > 0 Then
        s = Chr(64 + n) & s
    End If

    AA = s

End Function

答案 4 :(得分:0)

打印小写和大写承租人的xl单元格范围的集合

大写:

from string import ascii_uppercase
import itertools
def iter_range_strings(start_colu):
    for size in itertools.count(1):
        for string  in itertools.product(ascii_uppercase, repeat=size):
            yield "".join(string)

input_colume_range = ['A', 'B']
input_row_range= [1,2]
for row in iter_range_strings(input_colume_range[0]):
    for colum in range(int(input_row_range[0]), int(input_row_range[1]+1)):
        print(str(row)+ str(colum))
    if row ==  input_colume_range[1]:
        break

结果:

A1
A2
B1
B2

答案 5 :(得分:0)

两行(加上一个导入):

from string import ascii_uppercase as ABC

count = 100
ABC+=' '
[(ABC[x[0]] + ABC[x[1]]).strip() for i in range(count) if (x:= divmod(i-26, 26))]

如果需要重用,请将其包装在函数/ lambda中。