itertools.product
非常方便地生成一个列表的所有置换,但是如果一个列表中只有一个元素可以一次填充任何置换,那么一个如何继续牵连另一个元素列表呢?
在伪代码中:
from itertools import product
product('ABC', repeat=1) + ['.', '%3A']
->A, B, C, .A, .B, .C, A., B., C., %3AA, %3AB, %3AC, A%3A, B%3A, C%3A
我想这将是不平凡的,其中之一将不得不调整排列构建算法。
最佳答案
你有三个系列。将原始输入字符串作为列表,然后进行前置和追加。分别生成这三个:
from itertools import chain, product
inputstring = 'ABC'
extra = ['.', '%3A']
for combo in chain(inputstring,
product(extra, inputstring), product(inputstring, extra)):
combo = ''.join(combo)
print(combo)
带列表理解的演示:
>>> from itertools import chain, product
>>> inputstring = 'ABC'
>>> extra = ['.', '%3A']
>>> [''.join(combo) for combo in chain(inputstring, product(extra, inputstring), product(inputstring, extra))]
['A', 'B', 'C', '.A', '.B', '.C', '%3AA', '%3AB', '%3AC', 'A.', 'A%3A', 'B.', 'B%3A', 'C.', 'C%3A']