Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成列表目录所有排列的组合(按特定顺序)_Python - Fatal编程技术网

Python 生成列表目录所有排列的组合(按特定顺序)

Python 生成列表目录所有排列的组合(按特定顺序),python,Python,我有一份清单 d = {'A': [1,2,3], 'B': [4,5], 'C': [6]} 我需要生成每个列表(A、B和C)的所有排列。这没关系 p = {} for k in d.keys(): p[k] = [i for i in itertools.permutations(d[k])] 这将导致p {'A': [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)], 'B': [(4, 5),

我有一份清单

d = {'A': [1,2,3], 'B': [4,5], 'C': [6]}
我需要生成每个列表(A、B和C)的所有排列。这没关系

p = {}
for k in d.keys():
    p[k] = [i for i in itertools.permutations(d[k])]
这将导致
p

{'A': [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)],
 'B': [(4, 5), (5, 4)],
 'C': [(6,)]}
然后,我需要合并A、B和C列表中的元组,但要按照特定的顺序(例如,按照
排序的顺序(p.keys())
,这实际上给出了
['A','B','C']
)。所以我应该得到整数元组的列表:

[(1,2,3,4,5,6),
 (1,2,3,5,4,6),
 (1,3,2,4,5,6),
 (1,3,2,5,4,6),
 ...
 (3,2,1,5,4,6)
]
我知道在这种情况下可以使用
itertools.product
,但是初始字典
d
可以由任意数量的值组成,并且具有不同的键,我不知道在这种情况下如何使用它。 或者,也许你能对所描述的问题提出完全不同的解决方案。最终解决方案的速度越快,效果越好。

类似于以下内容:

from itertools import permutations, product, chain

d = {'A': [1,2,3], 'B': [4,5], 'C': [6]}
# You don't need to materialise permutations here, but this matches your existing dict
p = {k:list(permutations(v)) for k, v in d.iteritems()}    

for blah in product(*map(p.get, sorted(p))):
    print list(chain.from_iterable(blah)) # or use tuple instead of list

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 5, 4, 6]
[1, 3, 2, 4, 5, 6]
[1, 3, 2, 5, 4, 6]
[2, 1, 3, 4, 5, 6]
[2, 1, 3, 5, 4, 6]
[2, 3, 1, 4, 5, 6]
[2, 3, 1, 5, 4, 6]
[3, 1, 2, 4, 5, 6]
[3, 1, 2, 5, 4, 6]
[3, 2, 1, 4, 5, 6]
[3, 2, 1, 5, 4, 6]

令人惊叹的!!我试图回答。1)
*map(p.get,sorted(p))
按给定顺序返回列表,但是
*
是什么意思?2) 如何不实现排列?
*
解包一个序列-因此,如果您有一个包含三个元素的列表
产品(*一些列表)
与调用
产品(一些列表[0],一些列表[1],一些列表[2])
。。。2) 只是不要把
列表
放在dict comp中的排列前面