J'ai cherché dans tout le Web mais je n'ai pas trouvé la réponse.
Il y a deux listes comme ceci: Je veux obtenir une sortie comme ceci: p> première correspondance des valeurs dupliquées supprimera.
Le lien suggéré n'a pas résolu mon problème. Si j'utilise cela, la sortie sera la suivante: p>
3 Réponses :
boucle via la deuxième liste et retirez le premier de chacun dans B:
out = A[:] # If you don't care about A being changed, this isn't needed for b in B: out.remove(b)
Et si a = [1,2,1] et b = [1,2,3,1,4,3,2,1]
Cela soulève une ValueError, qui ne me semble pas déraisonnable.
Cela fait O (m * n) code> travail ( m code> étant la longueur de B code>, n code> longueur de Un code>), qui est sous-optimal; Pour les grandes entrées, construire une nouvelle sortie en convertissant B code> à quelque chose comme Collections.Counter code>, puis effectue une nouvelle liste code> de A < / code> Par Ajoutez code> ing vers la nouvelle liste code> uniquement si le nombre de comptes de la valeur est 0, sinon décrémentant le nombre de comptes, réduirait le travail à O (M + n) code>.
@Shadowranger: mais n'est pas ajouté à une liste linéaire, de sorte que ce serait quadratique si tous les éléments d'A sont annexés une par une?
@Remcogerlich: c'est amorti (code> o (1) code>; Certains appendent nécessitent un redimensionnement, mais il est globalisé d'un multiple de la taille actuelle, la plupart ne nécessitent donc pas de redimensionnement, ils viennent de mettre le pointeur dans une fente existante et d'incrémenter la longueur logique.
@Remcogerlich: J'ai posté une réponse qui démontre l'approche que j'ai décrite en détail, avec explication si vous souhaitez le vérifier.
A = [1,2,1]
B = [1,2,3,1,4,3,2,1]
for b in B:
if b in A:
A.remove(b)
B.remove(b)
print(A+B)
This is waht I suggest!
Essayez ceci: solution complète: p> à imprimer dans la commande triée: p> print (list(set(A).difference(B)))
Cela ne renverra que 4. «Cause si un objet se répète dans un ensemble, il ne fait pas de diffrance. Que {4} == {4,4,4,4,4}.
J'ai posé cette question moi-même :) Vous voulez dire que je ne sais pas ce que j'ai demandé? :)
Même si cela était correct, liste (défini (a) ^ SET (B)) code> ne fait pas la bonne chose lorsque B code> contient des éléments non trouvés dans a code>; Le résultat ajoutez i> ces B code> -Only éléments. Vous vouliez SET (A) - SET (B) CODE>, pas SET (A) ^ SET (B) CODE>.
Il s'agit d'éliminer les valeurs dupliquées et cela le fait parfaitement!
Cet exemple ne suffit pas, que se passe-t-il en cas de
a = [1,2,3,1,4,3,2,1] code> etb = [1,2,1] code>?Ce serait [3,4,3,2,1] Wanna Supprimer le premier match. Et ma question n'est pas dupliquée
Que se passe-t-il en cas d'a = [1,2,1] et b = [1,2,3,1,4,3,2,1]
L'ordre doit-il correspondre? Si
a = [1, 2, 3, 4] code> faitb = [3, 2, 1] code> se comporte différemment deb = [1, 2, 3 ] code>?@Darkknight: Sauf si il y a une subtilité que vous n'avez pas expliquée, votre question est une duplicata; Le duplicate lié souhaite également pouvoir supprimer exactement l'une de chaque copie d'une valeur dans une liste code> code> à partir d'une autre liste
code>. Vous avez juste besoin de lire plus de réponses, par exemple Celui-ci .Fyi, j'ai ajouté une réponse à Opération de soustraction de la liste Python qui est la préservation de la commande, se soucie des comptes d'élément et est
o (m + n) code> (plutôt queo (m * n) code> comme l'autre préservation de la commande, des réponses sensibles au nombre de comptes).