【发布时间】:2015-10-16 07:59:20
【问题描述】:
我有一个复杂的排列问题,我发现很难编写代码。
请耐心等待,这可能看起来有点难看。
我有这种形式的东西:
L = [ [[(1, 2)], [(1, 2),(1, 3)]], [[(2, 3)]] ]
我想像这样输出所有“排列”:
[ [(1,2),(2,3)], [(2,3),(1,2)], [(1,2),(1,3),(2,3)], [(2,3),(1,2),(1,3)] ]
直观地说,我需要列表中包含的元组的所有排序(不重复)。但是,同一列表中的元组不能在一起。例如。对于 [[(1, 2)], [(1, 2),(1, 3)]], (1,2) 和 (1,2),(1,3) 在同一个列表中。所以输出中的元素不能是(1,2)(1,3)(1,2)。
我编写了一些杂乱的代码来完成这项工作,但需要清理输出:
output=[]
for x in input:
for y in x:
a=[]
for x1 in input:
if x!=x1:
for y1 in x1:
a.append(list(permutations([y,y1],len([y,y1]))))
output.append(a)
这就足够了,但我还需要能够为这样的输入做到这一点:
[[[(1, 2)], [(1, 2), (1, 3)]], [[(2, 3)]], [[(4,5),(6,7)]]
因此,这样的元素将包含在输出中:
[(4,5),(6,7),(1,2),(2,3)]
有人知道我应该如何处理这个问题吗?或者有什么建议?
【问题讨论】:
-
这个问题我很不清楚。您所说的“排列”是什么意思,以及列表的哪一部分?列表中的几层嵌套有什么意义呢?输出的顺序应该是什么,应该如何分组?列表可以嵌套到任意深度吗?目前,我无法完全理解这个问题所问的问题,而且我有点怀疑其他人也可以。
-
同意 Score_Under。在问题的第二部分,您似乎只是想获取所有唯一的元组。
-
我不明白这个问题。看起来有一些基本元素是两个整数的列表,也许您希望它们的所有排列一次 1、2 和 3 不重复但计算不同的顺序。一种方法是首先创建一个所有 uniqe 基本元素的列表,然后在 1、2 和 3 组中列出它们的排列。使用 itertetools.permutations 很容易做到这一点,因为它需要一个指定组长度的参数(称为r f 表示元组长度)。见docs.python.org/3/library/itertools.html#itertools.permutations。
-
@ate50eggs 它很复杂,没有从它周围的数学背景中获得的数学直觉和视觉表示。我会回去尝试让它更清楚。唯一元组是相关的,但不完全相关。
-
@TrisNefzger 直观地说,我需要列表中包含的元组的所有排序(不重复)。但是,同一列表中的元组不能在一起。例如。对于 [[(1, 2)], [(1, 2),(1, 3)]], (1,2) 和 (1,2),(1,3) 在同一个列表中。所以输出中的元素不能是(1,2)(1,3)(1,2)。
标签: python algorithm list multidimensional-array permutation