sta*_*ael 7 filtering wolfram-mathematica list
我想从列表列表中删除重复数据删除,保持子列表结构不变.
例如
{{1, 7, 8}, {4, 3}, {4, 1, 9}, {9, 2}}
变
{{1, 7, 8}, {4, 3}, {9}, {2}}
这是嵌套的范围,空的子列表是可以的.
Sza*_*lcs 11
这是一个经典的伎俩:
list = {{1, 7, 8}, {4, 3}, {4, 1, 9}, {9, 2}}
Module[{f},
f[x_] := (f[x] = Sequence[]; x);
Map[f, list, {2}]
]
Run Code Online (Sandbox Code Playgroud)
要了解它是如何工作的,请考虑f[1]
第一次评估时会发生什么. f[1]
将评估(f[1]=Sequence[]); 1
,然后评估1
.所以现在已经做出了定义f[1]
.下一次f[1]
评估时,它将简单地评估为Sequence[]
.
因此,第一次f
评估参数时,它返回该参数.它被评估的第二个(或第三个等)时间返回Sequence[]
. Sequence[]
具有完全剥离表达式的属性,{1, Sequence[], 3}
即将评估为{1, 3}
.
总而言之,该函数的作用是:第一次看到一个元素时,它会将元素替换为自身(单独留下).第二次它看到相同的元素,它会删除它.我将此函数映射到" 级别2 ",因此它仅对子列表的元素起作用.
归档时间: |
|
查看次数: |
309 次 |
最近记录: |