Wolfram mathematica mathematica中的两个列表运算

Wolfram mathematica mathematica中的两个列表运算,wolfram-mathematica,list-manipulation,Wolfram Mathematica,List Manipulation,我有两个列表操作,我想寻求帮助。我实现它们的方式不是很优雅,所以我想向各位专家学习 1) 假设我有两个列表,一个像{0,2,4},{1,3,2},{2,0,4},另一个像{1,3,7},{2,4,6},{3,1,9}。我想要么基于值,要么基于一些标准来过滤第一个列表,然后在第二个列表中获得相应的元素。例如,基于非零值,我想得到{{3,7},{2,4,6},{3,9}。基于大于2的条件,我想得到{{7}、{4}、{9} 2) 我有一个列表,比如{{{1,2}、{1,1}、{1,3}、{2,4}、{

我有两个列表操作,我想寻求帮助。我实现它们的方式不是很优雅,所以我想向各位专家学习

1) 假设我有两个列表,一个像
{0,2,4},{1,3,2},{2,0,4}
,另一个像
{1,3,7},{2,4,6},{3,1,9}
。我想要么基于值,要么基于一些标准来过滤第一个列表,然后在第二个列表中获得相应的元素。例如,基于非零值,我想得到
{{3,7},{2,4,6},{3,9}
。基于大于2的条件,我想得到
{{7}、{4}、{9}

2) 我有一个列表,比如
{{{1,2}、{1,1}、{1,3}、{2,4}、{1,2}、{2,3}、{1,4}、{3,3}
。我想形成
{{{1,2},{{1,1},{2,3}},{1,3},{2,4},{1,4},{{3,3}}}
,也就是说,如果第一个元素相同,我想对第二个列表进行分组。我如何以一种漂亮的方式做到这一点


非常感谢。

对于第一部分,您需要:

对于第二个问题,让您大致了解:

In[29]:= x = GatherBy[{{{1, 2}, {1, 1}}, {{1, 3}, {2, 4}}, {{1, 2}, 
    {2, 3}}, {{1, 4}, {3, 3}}}, First]

Out[29]= {{{{1, 2}, {1, 1}}, {{1, 2}, {2, 3}}}, {{{1, 3}, 
    {2, 4}}}, {{{1, 4}, {3, 3}}}}
然后你可以应用一个规则来清理一些东西:

In[30]:= x /. l:{{a_, _}..} :> {a, Last /@ l}

Out[30]= {{{1, 2}, {{1, 1}, {2, 3}}}, {{1, 3}, {{2, 4}}},
    {{1, 4}, {{3, 3}}}}

正如Michael所说,
Pick
绝对是第一个选择的方式

对于第二部分,我想提供一个替代方案,让您可以在一行中完成此操作:((我知道,这是自我提升,但我经常使用此功能。)要获得您想要的结果,只需输入即可

In[1] := SelectEquivalents[ <list>, First, Last, {#1,#2}& ]
Out[1]:= {{{1, 2}, {{1, 1}, {2, 3}}}, {{1, 3}, {{2, 4}}}, {{1, 4}, {{3, 3}}}}
[1]中的
:=SelectEquivalents[,First,Last,{1,{2}&]
Out[1]:={{{1,2},{{1,1},{2,3},{1,3},{2,4},{1,4},{3,3}}

在内部,
SelectEquivalents
使用
eaw
Sow
,因此
首先
标记
中的每个元素,
最后
将元素转换为我们希望使用的形式,
{1,{2}
返回一个包含
{Tag Tag}形式元素的列表
。优点是您可以在一个步骤中指定所有内容,无需后续转换即可获得所需内容。

+1.谢谢您。在第一部分中,我考虑了
选择
。但它不允许我将函数放在那里(不像
选择
),是吗?你如何处理>2个案例?我刚刚更新了我的答案,你可以在第三个参数中使用一个条件。我刚刚也清理了第二部分的答案…@Qiang@Michael即使Pick没有第三个参数,你也可以用Pick做如下:
Pick[{{1,3,7},{2,4,6},{3,1,9},Positive@{{0,2,4},{1,3,2},{2,0,4}}]
您可以在更复杂的情况下使用纯函数。请注意,您可以在此处使用@,因为Positive是可列出的。对于不可列出的函数,请在适当级别使用Map。
In[1] := SelectEquivalents[ <list>, First, Last, {#1,#2}& ]
Out[1]:= {{{1, 2}, {{1, 1}, {2, 3}}}, {{1, 3}, {{2, 4}}}, {{1, 4}, {{3, 3}}}}