gpt4 book ai didi

python - 如何创建一个无限迭代器来生成一个递增的字母表模式?

转载 作者:太空狗 更新时间:2023-10-30 02:02:22 25 4
gpt4 key购买 nike

我创建了一个函数来生成一个连续递增的字母列表。 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']

最佳答案

每次都产生column_names的最后一个元素,并使用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 从 1 开始逐渐增加时,它基本上迭代长度为 i 的大写 ascii 字母(每个可能的序列)的乘积(A, B, C).

关于python - 如何创建一个无限迭代器来生成一个递增的字母表模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com