Я хотел бы получить количество различных значений, найденных в списке.
Например:
Выход для списка a={1,2,3,4,5}
будет равен 5, тогда как для b={1,1,1,2,2}
будет 2.
Я хотел бы получить количество различных значений, найденных в списке.
Например:
Выход для списка a={1,2,3,4,5}
будет равен 5, тогда как для b={1,1,1,2,2}
будет 2.
Просто для развлечения, все следующие команды также дают желаемый результат:
[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]
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!
Используйте DeleteDuplicates
(или Union
в старых версиях) для удаления повторяющихся элементов. Затем вы можете подсчитать элементы в возвращаемом списке.
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]]