我在理解 Mathematica 中的尖锐符号时遇到了一些问题。我理解# &
为变量的占位符。但是在下面的代码中是如何理解的#1
呢?#2
x = {0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1};
Split[x, #1 =!= 0 && #2 =!= 0 &]
什么是#1
和#2
这里?这些行的输出是
{{0}, {1, 1, 1}, {0}, {0}, {1, 1, 1}, {0}, {0}, {1}}
我在理解 Mathematica 中的尖锐符号时遇到了一些问题。我理解# &
为变量的占位符。但是在下面的代码中是如何理解的#1
呢?#2
x = {0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1};
Split[x, #1 =!= 0 && #2 =!= 0 &]
什么是#1
和#2
这里?这些行的输出是
{{0}, {1, 1, 1}, {0}, {0}, {1, 1, 1}, {0}, {0}, {1}}
该版本的Split采用 形式Split[list,test]
,其中是一个带有两个变量test
的函数。所以
#1 =!= 0 && #2 =!= 0 &
是双变量纯函数的简写,其中#1
和#2
是变量名。
通常,Split
将获取一个列表并返回相同的列表,该列表被划分为“相同”元素的连续运行。因此,如果您的列表是list={0,0,2,2,3,4,4,5,5,5,7}
,则Split[list]
产生
{{0,0}, {2,2}, {3}, {4,4}, {5,5,5}, {7}}
但也许你想定义两件事不同地“相同”意味着什么。这就是通用Split[list,test]
函数的用武之地。test
这里的函数是一个接受两个参数的函数,如果它们相同则返回true;该test
函数是您测试两个事物是否相同的测试。例如,您提供的测试功能
#1 =!= 0 && #2 =!= 0 &
如果两个元素都非零,则返回 true。因此Split
,如果元素是零的运行,或者它们是非零的运行,您的函数会对元素进行分组。
再举一个例子,假设如果两个整数具有相同的奇偶性(偶数或奇数),则它们是相同的。那么您的拆分功能将是
Split[list, Mod[#1,2] == Mod[#2,2]]
对于我定义的列表将返回
{{0,0,2,2}, {3}, {4,4}, {5,5,5,7}}