Pythonic生成器在可能的字母组合上的起始值

2024-10-03 00:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着(1)重复所有可能的字母组合,(2)记住我离开的地方。在

E.g. a,b, c, d, ... z, aa, ab, ac, ad, ..., zz, aaa, ...

第一部分正在工作,使用以下代码:

^{pr2}$

但是我不能从其他地方开始迭代,也就是说,总是a,b,c,…有没有一种干净的方法来扩展生成器,以便像

xselections(items=ascii_lowercase, n=3, last=[a,c,y])
-> acz, ada, adb, adc, ...

有可能吗?我在看itertools,但没有看到光。。。在


Tags: 方法代码ab地方asciiitemsadac
2条回答

这应该可以做到:

import itertools

letters = [ chr(l) for l in range(ord('a'), ord('z')+1) ]

def combinations(skip_to=None):
    combinations = ( itertools.combinations_with_replacement(letters, k) for k in range(1, len(letters)+1) )
    flat = itertools.chain.from_iterable( combinations )
    return flat if skip_to is None else itertools.dropwhile( lambda x: x != skip_to, flat )

itertools模块很神奇事实上:-)在

我知道这不是你想要的,但是我写了一个函数,它是从int到字母序列的一对一的对应,就像你指定的那样

def intToLetterSeq(x):
a = list()
while(x >= 0):
    a += [x % 26]
    x /= 26
    x -= 1
return [chr(97+i) for i in a[::-1]]

>>> intToLetterSeq(0)
['a']
>>> intToLetterSeq(25)
['z']
>>> intToLetterSeq(37)
['a', 'l']
>>> intToLetterSeq(11*26**3+7*26**2+2*26+20)
['k', 'g', 'b', 'u']

所以这应该会让你从随机点上捡起来容易一点

相关问题 更多 >