我编辑了这篇文章。对不起,我以为它会出现在Mathematica部分。这个问题与mathematica软件有关。
我想在两个列表之间进行所有可能的组合,但有一些限制。例如,假设我有以下列表:
list1=Flatten[Table[{i, j}, {j, 0, 1}, {i, 0, 1}], 1]
{{0, 0}, {1, 0}, {0, 1}, {1, 1}}
list2={a,b}
我想得到的是一个列表,它在list1中的每个子列表和list2中的每个子列表之间进行所有可能的组合,如果可能的话,list2中的元素在list1中使用相同的子列表。我想要的解决方案是:
{{{0, 0, a}, {1, 0, b}}, {{0, 0, a}, {0, 1, b}}, {{0, 0, a}, {1, 1, b}}, {{1, 0, a}, {0, 0, b}}, {{1, 0, a}, {0, 1, b}}, {{1, 0, a}, {1, 1, b}}, {{0, 1, a}, {0, 0, b}}, {{0, 1, a}, {1, 0, b}}, {{0, 1, a}, {1, 1, b}}, {{1, 1, a}, {0, 0, b}}, {{1, 1, a}, {1, 0, b}}, {{1, 1, a}, {0, 1, b}}}
有一种简单的方法吗?
我想为更大的列表执行此操作,例如:
list1=Flatten[Table[{i, j, z}, {z, -2, 2}, {j, -2, 2}, {i, -2, 2}], 2]
{{ - 2,-2,-2},{-1,-2,-2},{0,-2,-2},{1,-2,-2},{2, - 2,-2}, {-2,-1,-2},{-1,-1,-2},{0,-1,-2},{1,-1,-2},{2,-1,-2 }, {-2,0,-2},{-1,0,-2},{0,0,-2},{1,0,-2},{2,0,-2},{-2 ,1, -2},{-1,1,-2},{0,1,-2},{1,1,-2},{2,1,-2},{-2,2,-2} ,{-1,2,-2},{0,2,-2},{1,2,-2},{2,2,-2},{ - 2,-2,-1},{ -1, -2,-1},{0,-2,-1},{1,-2,-1},{2,-2,-1},{ - 2,-1,-1},{ - 1,-1,-1},{0,-1,-1},{1,-1,-1},{2,-1,-1},{-2,0,-1},{ -1,0,-1},{0,0,-1},{1,0,-1},{2,0,-1},{ - 2,1,-1},{-1, 1,-1},{0,1, -1},{1,1,-1},{2,1,-1},{ - 2,2,-1},{-1,2,-1},{0,2,-1} ,{1,2,-1},{2,2,-1},{ - 2,-2,0},{-1,-2,0},{0,-2,0},{1 ,-2,0}, {2,-2,0},{ - 2,-1,0},{-1,-1,0},{0,-1,0},{1,-1,0},{2, -1, 0},{ - -2,0,0},{-1,0,0},{0,0,0},{1,0,0},{2,0,0},{ - 2,1} , 0},{-1,1,0},{0,1,0},{1,1,0},{2,1,0},{-2,2,0},{-1,2 , 0},{0,2,0},{1,2,0},{2,2,0},{ - 2,-2,1},{-1,-2,1},{0, -2, 1},{1,-2,1},{2,-2,1},{ - 2,-1,1},{-1,-1,1},{0,-1,1}, {1, -1,1},{2,-1,1},{ - -2,0,1},{-1,0,1},{0,0,1},{1,0,1},{ 2,0,1},{ - 2,1,1},{-1,1,1},{0,1,1},{1,1,1},{2,1,1},{ -2, 2,1},{-1,2,1},{0,2,1},{1,2,1},{2,2,1},{-2,-2,2},{ - 1, -2,2},{0,-2,2},{1,-2,2},{2,-2,2},{ - 2,-1,2},{-1,-1, 2},{0,-1,2},{1,-1,2},{2,-1,2},{-2,0,2},{-1,0,2},{0 ,0,2}, {1,0,2},{2,0,2},{-2,1,2},{-1,1,2},{0,1,2},{1,1,2}, {2, 1,2},{ - 2,2,2},{ - 1,2,2},{0,2,2},{1,2,2},{2,2,2}}
list2={a,b,c,d}
以便解决方案如下:
{{{-2, -2, -2, a}, {-1, -2, -2, b}, {0, -2, -2, c}, {2, -2, -2, d}},....., {{-2, -2, -2, a}, {-1, -1, -1, b}, {0, 0, 0, c}, {2, 2, 2, d}}
请注意,以下内容不应在列表中
{{-2, -2, -2, a},{-2, -2, -2, b},{-2, -2, -2, c},{-2, -2, -2, d}}
非常感谢。
答案 0 :(得分:2)
我假设三胞胎对的具体顺序并不重要。
使用Table
缩短Tuples
内容。
您可以使用Subsets
获取没有重复的对。
Permutations
用于获取子集的所有排序。
Join
和Apply
(@@
)用于展平嵌套列表的一个级别。
list2
已使用List /@ {a, b}
转换为{{a}, {b}}
,以便用于:
最后一步是Map
Function
Join[#, list2, 2] &
这些子集。
所有在一起:
list1 = Tuples[{0, 1}, 2]
list2 = List /@ {a, b};
Join[#, list2, 2] & /@ Join @@ Permutations /@ Subsets[list1, {2}]
{{{0, 0, a}, {0, 1, b}}, {{0, 1, a}, {0, 0, b}}, {{0, 0, a}, {1, 0, b}}, {{1, 0, a}, {0, 0, b}}, {{0, 0, a}, {1, 1, b}}, {{1, 1, a}, {0, 0, b}}, {{0, 1, a}, {1, 0, b}}, {{1, 0, a}, {0, 1, b}}, {{0, 1, a}, {1, 1, b}}, {{1, 1, a}, {0, 1, b}}, {{1, 0, a}, {1, 1, b}}, {{1, 1, a}, {1, 0, b}}}