【发布时间】:2015-11-19 18:17:23
【问题描述】:
我想获得在 python 中合并 2 个(或理想情况下为 n 个)列表的所有可能方法,同时保持每个列表的内部顺序 - 即我想找到一些行为如下的函数 all_merges:
a = all_merges([1,2],[3,4])
结果:
a = [
[1,2,3,4],
[1,3,2,4],
[1,3,4,2],
[3,1,2,4],
[3,1,4,2],
[3,4,1,2] ]
(我希望这是全部)
我找不到简单的“pythonic”方式来做到这一点 - 请帮助!
=====
注意:
我正在考虑这样的事情(写成相对可读):
from itertools import permutations
def all_merges(list1,list2):
a = [1]*len(list1)
b = [2]*len(list2)
indexes = list(set(list(permutations(a+b))))
lists = [[]]*3
res = indexes # just for readability, will be overwriting indexes as we go along
for perm in indexes:
lists[1] = copy(list1)
lists[2] = copy(list2)
merge = perm
for i in range(0,len(perm)):
merge[j] = lists[perm[i]].pop(0)
return res
然而在舞台上
list(set(list(permutations(a+b))
如果列表的总长度高达 15,我会从
获得大量结果permutations(a+b)
(准确地说是 15 个!),而我最多只有 15choose7 (= 6435) 个不同的合并。
我意识到这里提供了对该行的替换,作为函数:permutations with unique values 但是现在这变得很混乱,我想看看是否有更清洁的解决方案来解决我原来的问题。
【问题讨论】:
标签: python list merge permutation