计算列表在Mathematica中获得多少个不同的值

问题描述

|| 我想获取列表中找到的不同值的数量。 例如: 列表
a={1,2,3,4,5}
的输出为5,而whereas1ѭ的输出为2。     

解决方法

        仅出于娱乐目的,以下所有命令也可提供所需的结果:
Length@Gather@l

Length@Union@l

Length@Tally@l

Count[BinCounts@l,Except@0]

Count[BinLists@l,Except@{}]

Length@Split@Sort@l

Length@GatherBy[l,# &]

Length@Split@SortBy[l,# &]
当然还有更多。 编辑 这是一个定时实验(不严重)
l = RandomInteger[{1,10^2},10^7];
t2[x_] := {Timing[x],ToString[HoldForm@x]};
SetAttributes[t2,HoldAll]
Grid[Reverse /@
  {t2[Length@DeleteDuplicates[l]],t2[Length@Tally[l]],t2[Length@Gather[l]],t2[Count[BinCounts[l],Except@0]],t2[Length@Union[l]],t2[Length@Split@Sort@l],t2[Count[BinLists[l],Except@0]]},Frame -> All]
顺便说一句:请注意
BinLists[ ]
BinCounts[ ]
之间的区别 编辑
DeleteDuplicates
vs
Tally
的详细视图
t = Timing;
ListLinePlot@Transpose@
  Table[l = RandomInteger[{1,10^i},10^7];
   {Log@First@t@Length@DeleteDuplicates@l,Log@First@t@Length@Tally@l},{i,Range[7]}]
谨防!日志图!     ,        使用ѭ6(或旧版本中的ѭ10)删除重复的元素。然后,您可以计算返回列表中的元素。
In[8]:= Length[DeleteDuplicates[a]]
Out[8]= 5

In[9]:= Length[DeleteDuplicates[b]]
Out[9]= 2
    ,        
Length[DeleteDuplicates[a]]
会成功的根据您将要执行的其他操作,可以使用
Union
Tally
代替
DeleteDuplicates
。     ,        
CountDistinct[a]
也可以解决问题,这是Mathematica 10.0中引入的功能,等效于
Length[DeleteDuplicates[a]]
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...