Mathematicaは:リスト内のすべての整数は数よりも少ないかどうかを確認しますか?

StackOverflow https://stackoverflow.com/questions/1184995

  •  19-09-2019
  •  | 
  •  

質問

リスト内のすべての整数が設定された数よりも少ないかどうかを判断するためにMathematicaの方法があります。たとえば、私は、リスト内のすべての数値があるかどうかを知りたい場合は10未満ます:

theList = {1, 2, 3, 10};
magicFunction[theList, 10]; --> returns False

ご協力いただきありがとうございます。

役に立ちましたか?

解決

の最大数を返すリストの MAX関数に、に見てリストインチこの値が一定数に満たない場合はそこから、あなたがチェックすることができます。

他のヒント

が提供する前に私の解決策は、私は前の二つのソリューションをコメントしてみましょう。ジョーイロバートのソリューションmagicFunction1とエリックのソリューションmagicFunction2を呼び出すことができます。

magicFunction1は非常に短く、エレガントです。私はそれについて好きではないことは、私は数字の非常に大きなリストを持っており、最初のものは、すでに10より大きい場合、それはまだ必要ない最大数を考え出すのすべての作業を行うということです。これはまた、magicFunction2に適用されます。

私は、次の2つのソリューションを開発します:

magicFunction3[lst_, val_] := 
 Position[# < val & /@ lst, False, 1, 1] == {}

magicFunction4[lst_, val_] := 
 Cases[lst, x_ /; x >= val, 1, 1] == {}

私が見つけたベンチマークを行う

In[1]:= data = Table[RandomInteger[{1, 10}], {10000000}];

In[2]:= Timing[magicFunction1[data, 10]]
Out[2]= {0.017551, False}

In[2]:= Timing[magicFunction2[data, 10]]
Out[2]= {10.0173, False}

In[2]:= Timing[magicFunction3[data, 10]]
Out[2]= {7.10192, False}

In[2]:= Timing[magicFunction4[data, 10]]
Out[2]= {0.402562, False}

だから私の最良の答えはmagicFunction4ですが、それはmagicFunction1より遅い理由を私はまだ知りません。 magicFunction3とmagicFunction4の間にこのような大規模なパフォーマンスの差がある理由は、私も無視します。

この種の試験は、「フォールド」を使用して構築することは簡単です。

magicFunction[ lst_, val_ ] :=
 Fold[ ((#2 < val) && #1) &, True, lst ]

句 '(#2

「&&#1」は、以前のすべての要素のための結果であなたの現在の要素のために結果を兼ね備えています。

そして「TRUE」基本ケースである - 。空のリストに対する結果

それがどのように動作するかを確認するには、あなたには、いくつかの未定義の値を渡すと、式はに展開ものを見ることができます:

In[10]:= magicFunction[ {a, b, c}, 10 ]

Out[10]= c < 10 && b < 10 && a < 10
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top