我怎样才能对任何字符进行 itertools.product 控制的重复?

How can I do itertools.product-controlled repetition of any character?

这是所有字符都可能有 8 个重复的代码

from itertools import *
for i in product(['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'],repeat = 8):
    b = (''.join(i))
    print (b)

我该怎么做 - 允许每个 8 符号字符串最多重复 4 或 5 个字符。例如,222abbccc 或 a3333abd。

允许列表中的每个符号在 8 符号字符串的任何位置重复 1 到 4 次,但保持工作排列并尽量不损失性能。

递归函数可以在 product 生成的内容之上实施其他规则。意识到重复 8 次的 16 个字符有大约 40 亿个结果,没有重复限制。以下功能有效,但示例时间有限:

from pprint import pprint

def generate(charset, length, maxrep):
    if length == 1:
        yield from charset
    else:
        for prefix in generate(charset, length - 1, maxrep):
            for char in charset:
                # Skip characters if the prefix already ends with the max rep
                if not prefix.endswith(char * maxrep):
                    yield prefix + char

pprint(list(generate('012',4,2)),compact=True)

输出:

['0010', '0011', '0012', '0020', '0021', '0022', '0100', '0101', '0102', '0110',
 '0112', '0120', '0121', '0122', '0200', '0201', '0202', '0210', '0211', '0212',
 '0220', '0221', '1001', '1002', '1010', '1011', '1012', '1020', '1021', '1022',
 '1100', '1101', '1102', '1120', '1121', '1122', '1200', '1201', '1202', '1210',
 '1211', '1212', '1220', '1221', '2001', '2002', '2010', '2011', '2012', '2020',
 '2021', '2022', '2100', '2101', '2102', '2110', '2112', '2120', '2121', '2122',
 '2200', '2201', '2202', '2210', '2211', '2212']