Подсчитайте, сколько разных значений занимает список в Mathematica

Я хотел бы получить количество различных значений, найденных в списке.

Например:

Выход для списка a={1,2,3,4,5} будет равен 5, тогда как для b={1,1,1,2,2} будет 2.

Ответ 1

Просто для развлечения, все следующие команды также дают желаемый результат:

[email protected]@l

[email protected]@l

[email protected]@l

Count[[email protected], [email protected]]

Count[[email protected], [email protected]{}]

[email protected]@[email protected]

[email protected][l, # &]

[email protected]@SortBy[l, # &]

И многое другое, конечно.

Изменить

Вот небольшой экспериментальный эксперимент (не серьезный)

l = RandomInteger[{1, 10^2}, 10^7];
t2[x_] := {Timing[x], ToString[[email protected]]};
SetAttributes[t2, HoldAll]
Grid[Reverse /@
  {t2[[email protected][l]],
   t2[[email protected][l]],
   t2[[email protected][l]],
   t2[Count[BinCounts[l], [email protected]]],
   t2[[email protected][l]],
   t2[[email protected]@[email protected]],
   t2[Count[BinLists[l], [email protected]]]},
 Frame -> All]

enter image description here

BTW: Обратите внимание на разницу между BinLists[ ] и BinCounts[ ]

Изменить

Более подробный обзор DeleteDuplicates vs Tally

t = Timing;
[email protected]@
  Table[l = RandomInteger[{1, 10^i}, 10^7];
   {[email protected]@[email protected]@[email protected],
    [email protected]@[email protected]@[email protected]},
   {i, Range[7]}]

Осторожно! Log Plot!

enter image description here

Ответ 2

Используйте DeleteDuplicates (или Union в старых версиях) для удаления повторяющихся элементов. Затем вы можете подсчитать элементы в возвращаемом списке.

In[8]:= Length[DeleteDuplicates[a]]
Out[8]= 5

In[9]:= Length[DeleteDuplicates[b]]
Out[9]= 2

Ответ 3

Length[DeleteDuplicates[a]]

сделал бы трюк. В зависимости от того, что вы собираетесь делать, вы можете использовать Union или Tally вместо DeleteDuplicates.

Ответ 4

CountDistinct[a]

также выполнит трюк, который является функцией, введенной в Mathematica 10.0, функцией, эквивалентной

Length[DeleteDuplicates[a]]