1

我的任务很简单,但我无法在数学中解决它。给定一个列表

myList = {1, 3, 4}

我想获得小于数字的条目位置 - 在上面的示例中说 2。尝试如

Position[myList, #[[1]] < 2 &]

Position[myList, # < 2 &]

这将类似于该功能SELECT不起作用。我该如何使用Position或其他一些功能。谢谢!

4

1 回答 1

2

原因:原因是 Position 采用的是模式而不是函数。(即位置[-list-,-pattern-])

解决方案

Position[myList, x_ /; x < 2]  
{{1}}

相似地:

myList2 = {1, 2, 3, 4, 5, 1, "notNumber"}
Position[myList2, x_ /; x < 3] 
{{1}, {2}, {6}}

(即Position[myList, element_x where element_x < 2])

/; <-- 表示一个条件(在针对特定输入定义函数时也非常有用!)

x_ <-- 是一个命名的“模式对象”

x <-- 是对模式对象的引用

更深层次的原因:我不知道 Mathematica 内部到底是什么样子,但我想它的运行方式是这样的:如果你使用功能描述而不是模式描述(即 #...& 而不是 x_/;.. .) 该函数查找包含“#...&”的模式,这是没有意义的(因为它比较的对象没有将它们提供给您定义的函数)。另一方面,当您使用模式描述时,它会比较它们,然后检查条件是否为真(条件限制匹配,广泛定义的 x_ 匹配所有内容)并获得有意义的匹配。翻转所有定义为与其他函数一起使用的函数。

我喜欢 Mathematica,但它不擅长使其基于模式的函数和基于函数的函数明显彼此分离(除了查看文档)。

希望有帮助。

于 2013-10-26T20:20:24.167 回答