微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建无限迭代器以生成递增的字母图案?

如何解决如何创建无限迭代器以生成递增的字母图案?

column_names每次都产生Yield的最后一个元素,并使用itertools.count而不是range提供无限的增量:

import itertools

def _column_name_generator():
    column_names = []
    for x in itertools.count():
        if x < 26:
            column_names.append(string.ascii_uppercase[x % 26])
        else:
            column_names.append(column_names[x/26 - 1] + string.ascii_uppercase[x % 26])
        yield column_names[-1]

更好的解决方案是更改原始代码,但无需使用消耗大量内存的column_names,这是

import itertools, string

def _column_name_generator():
    for i in itertools.count(1):
        for p in itertools.product(string.ascii_uppercase, repeat=i):
            yield ''.join(p)

它基本上遍历长度的乘积i大写ASCII字母(每个序列可能)当i被逐渐增大,起始1ABC)。

解决方法

我创建了一个函数,该函数生成连续递增的字母列表。A,B,C …,Z。在Z之后,到达AA,AB,AC … AZ。此模式重复。这类似于MS
Excel的列名。目前,此函数会生成一个有限的字母列表。

_column_name_generator() = ['A','B',...,'AA','AB','BA','BB','CV']

然后,我可以结合一些有限列表(例如0-10)对其进行迭代。请参阅下面的代码。我想要的是创建一个生成器,该生成器将为我提供无限长的递增字母列表。

import string


def _column_name_generator():
    column_names = []
    for x in range(0,100):
        if x < 26:
            column_names.append(string.ascii_uppercase[x % 26])
        else:
            column_names.append(column_names[x/26 - 1] + string.ascii_uppercase[x % 26])
    return column_names

container = []
for column_name,num in zip(_column_name_generator(),range(0,10)):
    container.append(column_name + str(num))

print _column_name_generator()
print container

container = ['A0','B1','C2','D3','E4','F5','G6','H7','I8','J9']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。