我的任务很简单,但我无法在数学中解决它。给定一个列表
myList = {1, 3, 4}
我想获得小于数字的条目位置 - 在上面的示例中说 2。尝试如
Position[myList, #[[1]] < 2 &]
Position[myList, # < 2 &]
这将类似于该功能SELECT
不起作用。我该如何使用Position
或其他一些功能。谢谢!
我的任务很简单,但我无法在数学中解决它。给定一个列表
myList = {1, 3, 4}
我想获得小于数字的条目位置 - 在上面的示例中说 2。尝试如
Position[myList, #[[1]] < 2 &]
Position[myList, # < 2 &]
这将类似于该功能SELECT
不起作用。我该如何使用Position
或其他一些功能。谢谢!
原因:原因是 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,但它不擅长使其基于模式的函数和基于函数的函数明显彼此分离(除了查看文档)。
希望有帮助。