recursion - 在 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, 1], First[l]], Drop[l, 1]]], First[l]], l]
或者
DelRek[l___List] :=
If[Length[l] > 1,
Prepend[DelRek[
DeleteCases[Drop[l, 1], First[l]], First[l]]],
l]
推荐阅读
- angular-material - 带有垫子工具栏的弯曲顶部边框
- android - NetworkSecurityConfig:使用资源“network_security_config”中的网络安全配置 debugBuild:true
- javascript - 阻止 JavaScript 事件传播
- python - 查看应用程序是否正在使用 Windows 10 上的麦克风
- excel - VBA 代码无法正常工作,因为它应该可以顺利运行
- javascript - 如何停止自动重新加载选项卡 CHROME EXTENSION
- javascript - JSX 片段没有对应的结束标记
- c# - Windows Presentatioin Framework 4 项目不支持 Prism InvokedCommandAction
- python - Python在函数内部更改变量值时不保存变量值
- mongodb - 我如何获得 mongodb 指标请求/秒