微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Mathematica 中查找删除列表中重复项的递归算法

如何解决在 Mathematica 中查找删除列表中重复项的递归算法

我想在 Mathematica 中实现一种算法,从给定的列表中删除重复项。 这是我尝试过的:

delrec[l___List] := Module[{m = {}},If[Length[l] != 1,If[MemberQ[l[[1 ;; Length[l] - 1]],l[[Length[l]]]],delrec[DeleteCases[l[[1 ;; Length[l] - 1]]],delrec[l[[1 ;; Length[l] - 1]]]],Print[l]];
l
];]

然而,这段代码并没有真正起作用,我不确定为什么。我还需要以相同的顺序输出列表,因此删除重复项但列表的排序保持不变。 使用 DeleteDuplicates 或 Union 不是一种选择。该函数需要递归。

解决方法

DelRek[l___List] := 
 If[Length[l] > 1,Prepend[DelRek[
    If[MemberQ[Drop[l,1],First[l]],DeleteCases[Drop[l,Drop[l,1]]],l]

或者替代

DelRek[l___List] := 
 If[Length[l] > 1,Prepend[DelRek[
    DeleteCases[Drop[l,First[l]]],l]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。