在Mathematica中,“仅选择”命令可以为列表中每个元素定义一个选择标准。
我想分别指定一个依赖于前一个和/或下一个元素的函数以及一个函数的标准。第一个和最后一个元素无法以这种方式进行测试,但无论如何都应该选择它们。
迭代地做这个可能不会有问题,我想先尝试它。
我会以某种方式使用它进行成像:
Select[list,FirstQ||LastQ,Func1[#-1,#]&&Func2[#,#1]&&Func3[list]&]
答案 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}。