0

我编写了一个生成器函数,它以与 Excel 等电子表格应用程序中的列命名方案相同的方式生成无限的字符串序列,例如:

'', 'A', 'B', ... 'Z', 'AA', 'AB', ... 'AZ', 'BA', ... 'ZZ', 'AAA', ...

我的功能没有任何问题:

def __suffix_generator():
    len, gen = (0, iter(['']))

    while True:
        try:
            suffix = next(gen)
        except StopIteration:
            len += 1
            gen = itertools.product(string.ascii_uppercase, repeat=len)
            suffix = next(gen)

        yield ''.join(suffix)

但是,我想把它变成一个更惯用的版本,它只使用生成器表达式,到目前为止我最好的镜头是这样的:

def __suffix_generator_gexp():
    from itertools import product, count
    from string import ascii_uppercase

    return (''.join(suffix) for suffix in
        (product(ascii_uppercase, repeat=len) for len in count()))

使用该生成器时,我得到一个运行时 TypeError ,它告诉我suffix变量的类型不被接受:

TypeError: sequence item 0: expected string, tuple found

我的假设是它suffix应该是一个包含特定组合字母的元组,join并将其转换为字符串。我怎样才能让它正常工作,就像第一个功能一样?

4

1 回答 1

2

也许这就是你要找的:

map(''.join, chain.from_iterable(product(ascii_uppercase, repeat=l) for l in count(1)))

count(n)n生成以using开头的数字序列step = 1,因此每个数字N_{t+1} = N_t + stepN_1 = n.

如果您使用的是 Python 2.x,map将尝试构造一个列表并且会失败,因此您可以这样做:

(''.join(perm) for perm in (...))

第一个片段...的第二个参数在哪里。map

于 2017-02-01T16:39:22.213 回答