Je voudrais obtenir le nombre de valeurs différentes trouvées dans une liste. p>
Par exemple: p>
la sortie de la liste a = {1,2,3,4,5} code> serait 5 alors que ce serait 2 pour
b = {1,1,1,2 , 2} code>. P>
4 Réponses :
Utilisez deleteduplicat code>
(ou Union code> dans les versions plus anciennes) pour éliminer les éléments en double. Vous pouvez ensuite compter les éléments de la liste retournée.
In[8]:= Length[DeleteDuplicates[a]]
Out[8]= 5
In[9]:= Length[DeleteDuplicates[b]]
Out[9]= 2
Length[DeleteDuplicates[a]] would do the trick. Depending on what else you're going to do, you could use Union or Tally instead of DeleteDuplicates.
Il peut être bon de noter que les supprimer peuvent être 20 fois plus rapides que l'union. L'Union renvoie une liste triée alors que les suppressions conservent les valeurs résultantes dans leur commande d'origine.
@Sjoerd, grand point. Cela peut être beaucoup plus, si la liste est principalement duplicate. Essayez: RandomInteger [999, 150000] CODE>.
@Sjoerd, @ M.Wizard Ce que vous avez observé est entièrement dû à la nature emballée des données sur lesquelles c'est le cas. Si nous prenons l'exemple de @ ''s Exemple RND = RandomInteger [999, 150000]; CODE> et DO
RND [[100000]] = 1/2; CODE>, puis effectuez les repères, < Code> Supprimplicates Code> est toujours plus rapide mais seulement par un facteur de
3 code>, ce qui est probablement dû à sa complexité linéaire par rapport à la complexité
N code> de
Union code>.
Juste pour l'amusement, toutes les commandes suivantes donnent également le résultat souhaité: et beaucoup plus, bien sûr. p> Voici une petite expérience de synchronisation (non grave) p> p> BTW: Notez la différence entre edit fort> p> une vue plus détaillée de méfiez-vous! Terrain de journal! P> p> p> p> Binlists [] code> et
BinCounts [] P> P>
deleteDeuplicat code> vs
Tally code> p>
Merci Belisarius! Quel serait votre préféré? Le plus rapide ?
@ 500 Comme il a été mentionné précédemment, deleteduplicates [] code> est le plus rapide afaik. Ce sont juste pour montrer à l'OP d'autres moyens de faire la même chose.
@Belisarius, comme Sjoerd que la comparé à l'Union, je n'étais pas sûr de votre autre solution, merci!
@Belisarius: C'est impressionnant. Je découvre aussi que très élégante Holdform, merci.
Length[DeleteDuplicates[a]]