我如何从特定 letter/digit 启动 itertools 组合?

How can i start itertools combinations from specific letter/digit?

我有这样的代码:

start = 1
end = 2
for length in range(start, end+1):
    for c in itertools.combinations_with_replacement(string.ascii_letters + string.digits, length):

这将打印从 A 到 Z 的每个 uppercase/lowercase 个字母,在所有字母完成后,它将开始打印从 0 到 9 的所有数字。所以它看起来像这样:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

第一个循环完成后,进入第二个循环并做同样的事情。 像这样:

第一个周期开始:a

第二个循环开始:aa

等等

我想要它做什么:

我想从特定的字母或数字开始组合。

像这样:

组合1:

第一个周期开始:b

第二个周期开始:ba

如果不行就这样:

组合二:

第一个周期开始:b

第二个周期开始:bb

我认为你在某个索引之后要求所有可能的排列,在这种情况下你可以这样做:

import string
import itertools

chars = string.ascii_letters + string.digits

def alpha_perms(index):

    return list(itertools.permutations(chars[index:]))

print(alpha_perms(0)) #0th index to go along with the below statement

尽管...这很可能(绝对)会冻结您的机器。 chars 中有 62 个字符,即 62!(62 阶乘),约等于 3.1469973e+85~π*10^85th 假定您传入第 0 个索引的可能组合的幂。即使是一个合理的索引也需要很长时间。

或者,因为使用 return list(...) 会导致高组合可能性的问题。您可以 yield

import string
import itertools

chars = string.ascii_letters + string.digits

def alpha_perms(index):

    for perm in itertools.permutations(chars[index:]):
         yield perm