J'ai une liste dans Python que je génère dans le cadre du programme. J'ai une hypothèse forte que celles-ci sont toutes différentes, et je vérifie cela avec une affirmation.
C'est la façon dont je le fais maintenant: p>
S'il y a deux éléments: P>
try: assert(x[0] != x[1]) assert(x[0] != x[2]) assert(x[1] != x[2]) except: print debug_info raise Exception("throw to caller")
7 Réponses :
Peut-être quelque chose comme ceci:
Vous pouvez simplement les stocker dans un ensemble en premier lieu pour vous assurer qu'ils sont tous uniques. Ou stockez-les dans un ensemble, mais avant d'ajouter à la vérification de l'adhésion. Mais cela fonctionne définitivement si vous n'avez pas de contrôle sur le format d'entrée.
Les ensembles ne conservent pas nécessairement la commande, ce qui pourrait être important.
Pourquoi est-ce important à cette fin? Tout ce que j'essaie de faire est de voir si la liste a le même nombre d'éléments après avoir supprimé les doublons.
Que diriez-vous:
if len(x) != len(set(x)): raise Exception("throw to caller")
Espérons que tous les éléments de votre séquence sont immuables - sinon, vous ne pourrez pas appeler Si vous < EM> DO EM> ont des éléments mutables, vous ne pouvez pas utiliser les articles et vous devez vérifier à plusieurs reprises à travers la liste: p> définir code> sur la séquence.
< / code> p>
Lorsque vous construisez la liste, vous pouvez vérifier si la valeur existe déjà, par exemple: l'avantage de ceci est que la variable d'affichage sera signalée. P> < / p>
Vous pouvez traiter la liste pour créer une copie unique à une seule copie: ou si les éléments SEQ ne sont pas hachables: p> et cela gardera les éléments dans l'ordre (omettez des doublons, bien sûr). p> p>
Les réponses les plus populaires sont O (n) (bon! -) Mais, en tant que @Paul et @ @mark SOINT, ils exigent que les articles de la liste soient hautables. Les approches proposées par @Paul et @ Mark pour les éléments indâlables sont générales mais prises O (n au carré) - c'est-à-dire beaucoup.
Si les articles de votre liste ne sont pas hautables mais sont em> sont comparables, vous pouvez faire mieux ... voici une approche qui fonctionne toujours aussi vite que possible, compte tenu de la nature des articles de la liste. p> ceci est O (n) si possible (tous les articles hachables ), O (n journal n) comme les retombes les plus fréquentes (certains éléments indésables, mais tous comparables), O (n carré), où inévitables (certains éléments indemnes, par exemple des dicts, par exemple des nombres complexes non comparables, par exemple). < / p> Inspiration pour ce code provient d'une ancienne recette par le grand Tim Peters, qui différait en produisant réellement une liste d'éléments uniques (et était également il y a jusqu'à présent que définir code> n'était pas là - Il a dû utiliser un
dict code> ...! -), mais essentiellement des problèmes identiques. p> p>
Avez-vous voulu dire V non pas dans L [i + 1:] pour v, i en énumérable (l) code>?
J'utiliserais ceci:
mylist = [1,2,3,4] is_unique = all(mylist.count(x) == 1 for x in mylist)