从mathematica中的列表中选择项目

时间:2012-05-07 13:24:40

标签: list select wolfram-mathematica rules

我在Mathematica中有一个很大的规则列表,但是我想选择与某些条件相对应的项目。虽然我一直在尝试使用Select和Take命令,但我无法获得所需的输出..

示例:假设我想从列表中选择A-> 1.2。

的项目
list={{A->1,B->2.1,C->5.2},{A->1.1,B->2.6,C->5.5},{A->1.2,B->2.7,C->5.7},{A->1.3,B->2.9,C->6.1}};

期望的输出将是     {A-> 1.2,B-> 2.7,C-> 5.7}

我知道可以根据列表中的值从列表中选择项目。但是我如何从规则列表中做到这一点?

由于

编辑:显然,案件可以解决问题:

案例[list,{A-> #| A->合理化[#],     规则[_,_] ..}]& / @ {1.2}

这也是以理性和非理性的形式搜索数字,这是我发现的另一个问题。

5 个答案:

答案 0 :(得分:3)

一种可能性是使用Select

例如

Select[mylist, MemberQ[#, A -> 1] &]

给出

  

(* {{A - > 1,B - > 2.1,C - > 5.2}} *)

其他例子;

Select[mylist, MemberQ[#, A -> 1.1 |  1.2] &]

Select[mylist, 
 MemberQ[#, A -> 1.1 |  1.2 | 1.3] && FreeQ[#, C -> 6.1] &]

答案 1 :(得分:3)

替代方案:

Select[list, A == 1.2 /. # &]

此解决方案的优势在于它使用Equal而不是MatchQ(或等效的)。 1.2 == 6/5给出True(数学意义上的比较),MatchQ[1.2, 6/5]给出False(结构比较)。当然,总是可以MatchQ[1.2, x_ /; x == 6/5]来解决这个问题。

此外,此解决方案忽略了列表中规则的顺序。

答案 2 :(得分:2)

或使用Cases

Cases[list, {A -> 1.2, ___}]

答案 3 :(得分:2)

另一个:

Pick[#, A /. #, 1.2]& @ list

答案 4 :(得分:1)

“期望的输出将是{A-> 1.2,B-> 2.7,C-> 5.7}” 因此,上述答案应该扁平化:)

Cases[N@mylist, {___, A -> 1.2, ___}] // Flatten

使用N将6/5之类的内容翻译成1.2。