Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Loops_Permutation - Fatal编程技术网

Python 在不必要的情况下不重复地获取排列

Python 在不必要的情况下不重复地获取排列,python,python-3.x,loops,permutation,Python,Python 3.x,Loops,Permutation,如何获得嵌套列表中元素的所有排列而不在不必要时重复。 例如,如果我有一个嵌套列表: [['a1','a2','a3'], ['b1', 'b2'], ['c1', 'c2', 'c3', 'c4']] 我想得到: ['a1', 'b1', 'c1'] ['a2', 'b2', 'c2'] ['a3', 'b1', 'c3'] ['a1', 'b2', 'c4'] 我认为您正在搜索的是您编写的,itertools.product itertools.product(*['a1'、'a2'、'a

如何获得嵌套列表中元素的所有排列而不在不必要时重复。 例如,如果我有一个嵌套列表:

[['a1','a2','a3'], ['b1', 'b2'], ['c1', 'c2', 'c3', 'c4']]
我想得到:

['a1', 'b1', 'c1']
['a2', 'b2', 'c2']
['a3', 'b1', 'c3']
['a1', 'b2', 'c4']

我认为您正在搜索的是您编写的,
itertools.product

itertools.product(*['a1'、'a2'、'a3']、['b1'、'b2']、['c1'、'c2'、'c3'、'c4']])#->
"""
[('a1','b1','c1'),
(‘a1’、‘b1’、‘c2’),
(‘a1’、‘b1’、‘c3’),
(‘a1’、‘b1’、‘c4’),
(‘a1’、‘b2’、‘c1’),
(‘a1’、‘b2’、‘c2’),
(‘a1’、‘b2’、‘c3’),
(‘a1’、‘b2’、‘c4’),
(‘a2’、‘b1’、‘c1’),
(‘a2’、‘b1’、‘c2’),
(‘a2’、‘b1’、‘c3’),
(‘a2’、‘b1’、‘c4’),
(‘a2’、‘b2’、‘c1’),
(‘a2’、‘b2’、‘c2’),
(‘a2’、‘b2’、‘c3’),
(‘a2’、‘b2’、‘c4’),
(‘a3’、‘b1’、‘c1’),
(‘a3’、‘b1’、‘c2’),
(‘a3’、‘b1’、‘c3’),
(‘a3’、‘b1’、‘c4’),
(‘a3’、‘b2’、‘c1’),
(‘a3’、‘b2’、‘c2’),
(‘a3’、‘b2’、‘c3’),
(‘a3’、‘b2’、‘c4’)]
"""
您可以使用和:


使用查找长度最大的元素,并将
cycle()
添加到列表中除此元素(长度最大)之外的所有元素。然后我们生成
zip()
,并得到您需要的结果

若要以问题的精确格式打印结果,请使用下一个代码:

print(*map(list, zip(*map(lambda x, m=max(src): cycle(x) if x != m else x, src))), sep="\n")

你所说的
是什么意思,在不必要的时候不重复。这里的输出是不完整的,它遗漏了许多排列。你想要的不是排列,而是一个叉积。他要求每列循环它们各自的值,也就是1/2/3/1/2/3、1/2/1/2/2、1/2/1/2、1/2/3/4/1/2,分别为a、b、c。['a1','b1','c1']['a2','b2']['a3','c3']['a1','b2','c4']['a3','c4']是理想的结果。我只想使用子列表中的每个元素一次,但如果子列表的长度不同,我可以再次使用它,但如果没有必要,我不想使用它it@EdZ你要求所有不重复的前提置换,这就是列表不,他没有。他要求每一列循环它们各自的值,分别为a、b、c的1/2/3/1/2/3、1/2/1/2、1/2/3/4/1/2exactly@EdZ哦,好的,编辑你的问题,这样它会更清楚:)是的,就是这样。我也这么做了,但使用的是itertools.product(.1),这是我的错
print(*map(list, zip(*map(lambda x, m=max(src): cycle(x) if x != m else x, src))), sep="\n")