2Ob*_*Obe 2 python alphabetical
我想创建按字母顺序升序的名称,例如 Excel 中的列名称。那就是我想要拥有某物。如a、b、c、...、z、aa、ab、...az、...zz、aaa、aab、...
我努力了:
for i in range(1000):
mod = int(i%26)
div = int(i/26)
print(string.ascii_lowercase[div]+string.ascii_lowercase[mod])
Run Code Online (Sandbox Code Playgroud)
直到zz为止都有效,但由于索引耗尽而失败
aa
ab
ac
ad
ae
af
ag
ah
ai
aj
ak
al
.
.
.
zz
Run Code Online (Sandbox Code Playgroud)
索引错误
您可以利用itertools.product():
from itertools import product
from string import ascii_lowercase
for i in range(1, 4):
for x in product(ascii_lowercase, repeat=i):
print(''.join(x))
Run Code Online (Sandbox Code Playgroud)
首先,您需要所有字母,然后是所有对,然后是所有三元组,等等。这就是为什么我们首先需要迭代您想要的所有字符串长度 ( for i in range(...))。
然后,我们需要与i字母的所有可能的关联,因此我们可以使用product(ascii_lowercase)相当于for重复多次的嵌套循环i。
这将生成所需大小的元组i,最后只需join()它们即可获得字符串。
要无限制地连续生成名称,请将for循环替换为while:
def generate():
i = 0
while True:
i += 1
for x in product(ascii_lowercase, repeat=i):
yield ''.join(x)
generator = generate()
next(generator) # 'a'
next(generator) # 'b'
...
Run Code Online (Sandbox Code Playgroud)