def filter_(x, y):
count = 0
for num in y:
if num in x:
count += 1
return count
5 Réponses :
Vous pouvez utiliser ou, pour la longueur de l'intersection: p> ou, plus concis: p> SET.InterSection Code> A >:
Je ne veux pas 9,5. Je veux un compte de 2.
Il n'est pas nécessaire d'effectuer explicitement un ensemble de la liste B, la méthode de l'intersection définie prend en charge des listes comme des intrants.
Convertissez-les en SET CODE> S et comptez l'intersection. len(set(a).intersection(set(b)))
chemin plus court et mieux: pourquoi votre code ne fonctionne pas: p> Votre Votre retourne code> était à l'intérieur de la boucle pour et qu'elle est renvoyée sans exécution étant complète. p> p>
Si vous souhaitez compter les entrées multiplicelles, les solutions à base d'ensemble échoueront; Vous aurez besoin de quelque chose comme puis p> retourne 2. L'heure de fonctionnement de cette balance sous O (n + m). < / p> aussi, votre solution initiale p> est fausse - appliquée à [1,2,3,3] et [1,1,1,1, 1,3], votre code reviendra 3 ou 6, aucun em> dont il est correct (la réponse doit être 2). P> P>
Cette solution est meilleure car elle compte aussi les duplicats, merci :)
La solution suivante représente également des éléments en double dans la liste: puis Notez que @HUGH Bothwell a également fourni une solution similaire, mais elle jette parfois number_of_duplicat ([1, 2, 2, 2, 3], [1, 2, 2 , 4]) code> entraîne dans l'attendu 3 code>. P>
KeyError code> si un élément n'est contenu que dans la liste plus courte. p> p>
Notez qu'une fois que cela fonctionne (dédent le
retour code> deux fois), il ao (n * m) code> complexit, c'est-à-dire une balance assez horrible.@delnan merci pour la pointe. Donc, utiliser mieux les échelles d'intersection.
Oui. Vous pouvez réellement faire encore mieux, mais cela nécessite plus d'une ligne de code (l'idée est que vous n'avez besoin que d'un ensemble de la première liste, puis de la seconde et de conserver les éléments qui se trouvent dans l'ensemble - enregistre la création d'une seconde. ensemble).
a code> contient1 code> deux fois, sib code> contenait1 code> doit également être incrémenté par1 < / code> ou2 code>?