Mathematica:确定列表中的所有整数是否小于一个数字?

时间:2009-07-26 16:48:10

标签: list wolfram-mathematica

Mathematica中是否有办法确定列表中的所有整数是否小于设定数。例如,如果我想知道列表中的所有数字是否小于10:

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:7)

查看Max function列表,它返回列表中最大的数字。从那里,您可以检查此值是否小于某个数字。

答案 1 :(得分:6)

在提供我的解决方案之前,让我评论前两个解决方案。让我们调用Joey Robert的解决方案magicFunction1和Eric的解决方案magicFunction2。

magicFunction1非常简洁优雅。我不喜欢的是,如果我有一个非常大的数字列表,并且第一个已经大于10,它仍将完成所有工作,找出不需要的最大数字。这也适用于magicFunction2

我开发了以下两种解决方案:

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之间存在如此大的性能差异。

答案 2 :(得分:3)

使用'折叠'很容易构建这种测试:

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

短语'(#2&lt; val)'是每个列表元素('#2')的测试。您可以在此处进行任何您想要的测试,因此您可以使用像Max这样的可列表函数进行更强大的测试。

'&amp;&amp; #1'然后将当前元素的结果与所有先前元素的结果组合在一起。

'True'是基本情况 - 空列表的结果。

要了解它是如何工作的,您可以传入一些未定义的值并查看表达式扩展到的内容:

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

Out[10]= c < 10 && b < 10 && a < 10