2010-08-20 51 views
2

在Mathematica中,僅選擇命令讓我們爲列表上的每個元素自己定義選擇標準在Mathematica中比較相鄰元素的「選擇」

我想分別指定一個標準,它依賴於前一個和/或下一個元素的函數以及一個函數。無論如何都不能測試第一個和最後一個元素,但應該選擇它們。

這樣做迭代可能不會是一個問題,我想先嚐試它的功能。

我會莫名其妙地成像使用它這樣:

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

回答

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, {[email protected]}, {}], 
    Select[Partition[list, 3, 1], [email protected]@#&][[All,2]], 
    If[lastq, {[email protected]}, {}]] 

注意,在參數trinaryfunc,#2是列表元素本身,#1的左鄰,和#3是正確的鄰居。 將這個概括爲使用任意數量的鄰居,而不僅僅是直接的鄰居,這將是很好的,但是然後你想要一個比{#1,#2,#3}的模擬更好的方式來引用它們。

+0

謝謝你的幫助。我用它來解決另一個問題。 事情是我意識到我的前提是錯的。我不能像那樣以靜態的方式去做我想象中的東西。 從左到右迭代,我需要檢查所有3組,是的,但是如果trinaryfunc條件不成立,我將踢出那個元素n並重復testcondition與新的3組包括元素n- 1,n + 1和n + 2。 也許我可以重複SelectWN函數,直到不再發生變化,但是這會導致最終3組的重複計算。 我想迭代的方法是去這裏。 – fabb 2010-08-22 18:31:14