Wolfram mathematica 两个列表之间的组合

Wolfram mathematica 两个列表之间的组合,wolfram-mathematica,combinations,Wolfram Mathematica,Combinations,我编辑了这篇文章。对不起,我以为它会出现在Mathematica部分。这个问题与mathematica软件有关 我想在两个列表之间进行所有可能的组合,但有一些限制。例如,假设我有以下列表: list1=Flatten[Table[{i, j}, {j, 0, 1}, {i, 0, 1}], 1] 我想要得到的是一个列表,它可以在列表1中的每个子列表和列表2中的每个子列表之间进行所有可能的组合,如果可能的话,列表2中的元素不会占用列表1中的相同子列表。我想要的解决方案是: {{{0, 0, a}

我编辑了这篇文章。对不起,我以为它会出现在Mathematica部分。这个问题与mathematica软件有关

我想在两个列表之间进行所有可能的组合,但有一些限制。例如,假设我有以下列表:

list1=Flatten[Table[{i, j}, {j, 0, 1}, {i, 0, 1}], 1]
我想要得到的是一个列表,它可以在列表1中的每个子列表和列表2中的每个子列表之间进行所有可能的组合,如果可能的话,列表2中的元素不会占用列表1中的相同子列表。我想要的解决方案是:

{{{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, -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}

因此,解决方案如下所示:

{{{-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}}
非常感谢。

  • 我假设三胞胎对的具体顺序并不重要

  • 您的
    构造将使用
    元组
    缩短

  • 您可以使用
    子集
    获得不重复的对

  • 置换
    用于获取子集的所有排序

  • Join
    Apply
    @
    )用于展平嵌套列表的一个级别

  • list2
    通过
    List/@{a,b}
    转换为
    {a},{b}
    ,用于:

  • 最后一步是
    函数
    映射到这些子集上

总而言之:

list1 = Tuples[{0, 1}, 2]
list2 = List /@ {a, b};

Join[#, list2, 2] & /@ Join @@ Permutations /@ Subsets[list1, {2}]

TL;博士,但这毕竟是一道数学题。这个问题似乎离题了,因为它是关于数学的。你会在上得到更好的接受,但请尝试更好地格式化你的问题。谢谢。嗨,巫师先生。非常感谢,这正是我想要的。唯一的缺点是它非常耗时。当我尝试一个包含4个元素的列表2时,使用计算机的所有内存需要一个多小时(它仍然没有完成)。我想为列表2的6个以上元素执行它(列表1将始终有3个元素)。可能的组合数量非常多。但无论如何,我真的很感激,因为这正是我想要的。@user3125577不客气。好的,看第二个例子,不可能枚举集合。您将拥有
二项式[5^3,4]
=9691375个子集。每个子集有4个!=共有232593000个组合的24个子集。除非你有一台超级计算机,否则就太多了。如果你描述一下你打算用这些组合做什么,我可以推荐一个替代方案。非常感谢你的帮助。我会尽力解释我最好的。从一些原子开始,我试图定义所有可能组合的坐标,以创建一个分子。我想考虑一个简单的案例,只有一些限制。关于配合物,原子被分开2 amstrong,一个新原子和其他原子之间的角度将是线性的或90度(平方分布)。后来我开始施加新的限制,比如对称性等等。。。我不认为它在计算上会如此昂贵。所以list1是用来描述所有的坐标系(在你写的例子中,它只是一个有x,y和分离的1个单位的平面),list2有所有的原子。例如:CO。我想创建list1坐标系和list2={c,o}。然后做所有的组合{(x1,y1,atom1},{x2,y2,atom2}},…}。之后,我将消除对称性相同的原子,最后是附近没有原子的原子(在这种情况下,在一个平方o1单位中)。最后将它们导出为单个Coordenate。我的最终目标是为每个组合使用不同的.txt。当然,对于两个原子来说很简单。@user3125577我鼓励您在专用的StackExchange网站上发布此完整的问题描述。我现在没有时间探讨此问题,但这听起来像是一个有趣但容易解决的问题。
{{{-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}}
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}}}