“选择”比较Mathematica中的相邻元素

时间:2010-08-20 10:35:27

标签: select wolfram-mathematica

在Mathematica中,“仅选择”命令可以为列表中每个元素定义一个选择标准

我想分别指定一个依赖于前一个和/或下一个元素的函数以及一个函数的标准。第一个和最后一个元素无法以这种方式进行测试,但无论如何都应该选择它们。

迭代地做这个可能不会有问题,我想先尝试它。

我会以某种方式使用它进行成像:

Select[list,FirstQ||LastQ,Func1[#-1,#]&&Func2[#,#1]&&Func3[list]&]

1 个答案:

答案 0 :(得分:3)

我建议使用分区功能。要获得与其直接邻居分组的列表的每个元素,您可以执行此操作

Partition[{a,b,c,d,e}, 3, 1]

得到这个:

{{a,b,c}, {b,c,e}, {c,d,e}}

知道这一点,我们可以制作一个“与邻居一起选择”的功能,大致符合您的规范:

SelectWN[list_, firstq_, lastq_, trinaryfunc_] := Join[
  If[firstq, {First@list}, {}], 
  Select[Partition[list, 3, 1], trinaryfunc@@#&][[All,2]], 
  If[lastq, {Last@list}, {}]]

请注意,在trinaryfunc的参数中,#2是列表元素本身,#1是左邻居,#3是右邻居。 将它概括为使用任意数量的邻居,而不仅仅是直接邻居,这将是很好的,但是你需要一种更好的方式来引用它们,而不是模拟{#1,#2,#3}。