为了账号安全,请及时绑定邮箱和手机立即绑定

创建按字母顺序升序的列表

创建按字母顺序升序的列表

蝴蝶不菲 2021-08-24 19:26:45
我想创建按字母顺序升序的名称,如 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])直到zz 才有效,但由于索引用完而失败aaabacadaeafagahaiajakal...zz索引错误
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

你可以利用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))

首先,您需要所有字母,然后是所有对,然后是所有三元组等等。这就是为什么我们首先需要遍历您想要的所有字符串长度 ( for i in range(...))。


然后,我们需要与i字母的所有可能的关联,因此我们可以使用product(ascii_lowercase)which 等效于嵌套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'

...


查看完整回答
反对 回复 2021-08-24
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

对于通用解决方案,我们可以使用生成器和islice来自itertools:


import string

from itertools import islice

def generate():

    base = ['']

    while True:

        next_base = []

        for b in base:

            for i in range(26):

                next_base.append(b + string.ascii_lowercase[i])

                yield next_base[-1]

        base = next_base


print('\n'.join(islice(generate(), 1000)))

和输出:


a

b

c

...

z

aa

ab

...

zz

aaa

aab

...

您可以islice根据需要使用任意数量的字符串。


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信