我在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}
这也是以理性和非理性的形式搜索数字,这是我发现的另一个问题。
答案 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。