3

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} です。

値に基づいて、リストからアイテムを選択できることを知っています。しかし、ルールのリストからそれを行うにはどうすればよいでしょうか?

ありがとう

編集:どうやら、ケースはトリックを行います:

Cases[リスト, {A-> # | A-> 合理化[#]、ルール[_、_] ..}] & /@ {1.2}

これはまた、私が見つけた別の問題である有理数および非有理数の数を検索します。

4

5 に答える 5

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]これを回避するために行うことは常に可能です。

また、このソリューションは、リスト内のルールの順序を無視します。

于 2012-05-08T20:07:57.177 に答える
3

1つの可能性は使用することです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] &]
于 2012-05-07T13:48:00.010 に答える
2

別のもの:

Pick[#, A /. #, 1.2]& @ list
于 2012-05-13T09:34:13.607 に答える
1

「望ましい出力は{A-> 1.2、B-> 2.7、C-> 5.7}です」したがって、上記の回答は平坦化する必要があります:)

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

N を使用して、6/5 などを 1.2 に変換します。

于 2012-05-15T20:49:50.890 に答える