Comment vérifier si deux nombres dans la liste sont les mêmes
J'étais curieux sur la façon dont je voudrais vérifier si 2 des chiffres à l'intérieur d'une liste sont identiques. Par exemple,
myList=[1,7,9,3,1,2,8]
Dans ce cas, "1" est répété dans "maliste'.
Comment pourrais-je faire un programme qui vérifie si deux numéros à l'intérieur d'une liste sont les mêmes(répété). Essayez d'utiliser des boucles, donc je peux comprendre, car je n'ai pas encore appris des fonctions complexes.
- -1 pour le manque d'effort de recherche et ne comprenant pas ce que vous avez essayé.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser les boucles, vous aurez à utiliser une liste ou d'un ensemble de nombres que vous avez déjà vu. Puis en bouclant vous allez vérifier, avec le
in
opérateur si le numéro est déjà vu.set
ne permet pas de doublons, donc c'est un bon ajustement pour ce genre d'un algorithme. Comme mentionné dans les commentaires, la complexité du temps pour vérifier si un élément est dans un jeu est constante pour le cas moyen (O(1)), donc c'est plus efficace si vous avez beaucoup de chiffres.Je dirais que la plupart des pythonic façon est d'utiliser des
collections.Counter
, mais les autres réponses portent déjà. L'utilisation d'un intégré, vous pouvez générer un ensemble de nombres qui apparaissent plus d'une fois à l'aide d'un générateur d'expression etset
.Ici l'expression de la boucle sur toutes les valeurs dans
myList
et les ajouter à uneset
appeléseen
si elles ont déjà été vues. Finalement, il vous permet de convertir l'ensemble résultant en une liste et d'imprimer le contenu.seen
un ensemble au lieu d'une liste, mais l'idée reste la même.if number in seen:
est très rapide. Siseen
est une liste, puis dans l'ordre pour être sûr qu'une valeur n'est pas là, il a à parcourir la liste entière (O(n)). Tester si une valeur est dans un jeu est de ~O(1).À l'aide de
collections.Compteur
:Avec
Collections.Counter
, vous savez combien de fois est répété à chaque élément de votre liste sourcemyList
.Après cela, vous pouvez utiliser un simple
compréhension de liste
de savoir quels éléments sont répétés:collections.Counter
est quelque chose de complexe 🙂Counter
est que si tout ce qui vous intéresse est de savoir si ou non un doublon, alors si vous avez une liste[0] + range(10**8)
,Counter
auront à parcourir toute la liste et de faire 10**8 touches, même si vous avez vraiment besoin de lire les 2 éléments à connaître la réponse a été oui. Sans savoir comment faire lefor
boucle version, tout simplement remis la magie deCounter
ne pas vous aider à vous adapter.for
boucles, c'est probablement à ce stade.Collections.Counter
. Aussi, l'OP a dit: "essayez d'utiliser des boucles, donc je peux comprendre", pas de "s'il vous plaît utiliserfor
boucles". Vous pouvez comprendre cette phrase comme "s'il vous plaît ne pas utiliser imbriquée interprétations de la liste ou trop compliqué les choses" (en raison de l'", donc je peux comprendre").Vous pouvez convertir votre liste à un Jeu en utilisant le haut-
set()
fonction, les Jeux ne peuvent pas avoir des doublons. Par conséquent, si la taille de l'Ensemble et de la Liste sont différents, votre Liste a des doublons.Ceci suppose que vous ne se soucient pas de ce que le double de l'est, vous voulez savoir si 1 ou plusieurs doublons existent.
Vous pourriez transformer la liste dans un ensemble
et de vérifier si la longueur est différente. Si oui, alors il y avait une répétition.
C'est parce qu'un ensemble conains chaque élément qu'une seule fois si plusieurs éléments sont égaux - tout comme définit dans le sens mathématique.
C'est la façon la plus simple si vous n'avez pas besoin de savoir qui numéro est double.
peut-être pas le plus facile à comprendre, mais c'est la façon dont je le fais.
il est équivalent à (et plus facile à suivre)
Si vous ne souhaitez pas utiliser un dictionnaire de compréhension: