我正在做一個給定兩個列表的程序,如果一個列表的一部分與另一個列表相同,則返回列表的另一部分。很難解釋,我會離開這裏的代碼比較Mathematica中的兩個列表
E8[L_, P_] := Module[{},
final = {};
For[i = 1, i <= Length[L], i++,
ok = True;
For[j = 1, j <= Length[P], j++,
If[L[[i, j]] != P[[j]],
ok = False
]
];
If[ok == True,
coin = Take[L[[i]], {Length[P] + 1, Length[L[[i]]]}];
AppendTo[final, coin]
]
];
Return[final]
]
L = {{a, b, a}, {a, b, b}, {b, b, p}, {a, b, a, a}};
P = {a, b};
E8[L, P]
時間= {{A},{B},{P},{A,A}
出於某種原因,程序評估爲True {b,b,p}並且不分配ok = False。 我需要幫助。由於
編輯:我只需要找出爲什麼確定在代碼
If[L[[i, j]] != P[[j]],
ok = False
]
可以肯定的那部分的問題是有沒有分配假。我嘗試將數字{a,b}改爲數字,程序運行正常,但是當我嘗試比較單詞時,它不起作用。我怎麼能比較列表與單詞?
您是否在尋找「Complement」功能?如果不是,請解釋你想要達到的目標。你幾乎肯定會用你嵌套的'For'循環來做錯誤的事情;爲什麼它看起來好像你正在使用Mathematic編寫C! – 2014-10-16 16:16:46
特別不熟悉Mathematica,但我認爲,如果我正確地理解了你的意思,如果你有A和B的集合,你想在A和B的交集B中的相對補集,這簡化了A的相對補充在B. http://en.wikipedia.org/wiki/Complement_%28set_theory%29#Relative_complement – 2014-10-16 16:44:01