我有一个列表嵌套的列表,希望在不重复使用其中任何一个元素的情况下,复制 itertools.product()
的效果。
>>> list = [['A', 'B'], ['C', 'D'], ['A', 'B']]
>>> [''.join(e) for e in itertools.product(*list)]
['ACA', 'ACB', 'ADA', 'ADB', 'BCA', 'BCB', 'BDA', 'BDB']
>>> # Desired output: ['ACB', 'ADB', 'BCA', 'BDA']
我需要对列表进行操作,但使用
itertools.product
计算并移除不必要的元素太耗费时间了,因为我的列表过于庞大(25亿个排列组合)。我只需要 ~500,000 个元素。希望能够得到一个可迭代的答案。注:我知道“product”是错误的术语,但我找不到我所需的单词。
注2:这是我想执行此操作的列表。
[['A', 'H', 'L'], ['X', 'B', 'I'], ['Q', 'C', 'V'], ['D', 'N'], ['E', 'F'], ['E', 'F'], ['G'], ['A', 'H', 'L'], ['X', 'B', 'I'], ['W', 'U', 'J', 'K', 'M'], ['W', 'U', 'J', 'K', 'M'], ['A', 'H', 'L'], ['W', 'U', 'J', 'K', 'M'], ['D', 'N'], ['P', 'O', 'T'], ['P', 'O', 'T'], ['Q', 'C', 'V'], ['R'], ['S'], ['P', 'O', 'T'], ['W', 'U', 'J', 'K', 'M'], ['Q', 'C', 'V'], ['W', 'U', 'J', 'K', 'M'], ['X', 'B', 'I']]
product
,你需要的不是笛卡尔积。 - Olivier Melançon