我怎样才能对任何字符进行 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']
这是所有字符都可能有 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']