0
votes

Python: Duplicates dans la liste

IM J'essaie de créer une nouvelle liste de valeurs uniques et de supprimer lesdites valeurs de la liste d'origine afin que ce qui reste soit des duplicates. Il semble que ma boucle ne saute plus de valeurs. xxx

résultats:

Duplicats (tableau)

[1, 4, 2]


3 commentaires

Avez-vous besoin des valeurs dupliquées ou des valeurs uniques? son genre de déroutant


J'aimerais retrouver une liste de valeurs uniques et la liste d'origine contient les valeurs dupliquées restantes.


Pouvez-vous modifier votre question pour inclure les résultats que vous souhaitez réaliser


6 Réponses :


0
votes

Vous retirez des valeurs de la liste que vous itération à travers, de sorte que votre boucle saute des valeurs, essayez ceci xxx

si vous devez clarifier ce que vous voulez faire avec une variable de matrice tel qu'il est Actuellement pas clair.


0 commentaires

0
votes

Vous n'avez pas besoin d'utiliser une boucle, il est beaucoup plus clair d'utiliser une compréhension de liste

DUPS = LIST (SET ([L POUR LA TRAYARE EN SI TRAY.COUNT (L)> 1]))

Cependant, la réponse fournie par KUCO 23 le fait-elle de manière appropriée avec une boucle.


0 commentaires

0
votes
array = [1,3,4,2,2,3,4]
def duplicates(array):
    mylist = []
    for item in array:
        if item not in mylist:
            mylist.append(item)
            array.remove(item)
        else:
            array.remove(item)
    return mylist
just remove the item that you don't append

0 commentaires

1
votes

Je pense que l'utilisation de collections.Counter est plus appropriée pour cette tâche: xxx

sortie: xxx < / p>


0 commentaires

1
votes

Le problème est avec le array.remove (élément) code>, il supprime l'élément à la position de l'index visité. Ainsi, le numéro d'index réduit par un et faisant la boucle pour ignorer la lecture de la valeur suivante.

[1, 3, 4, 2, 2, 3, 4] code> -> avant la 1ère indice d'itération 0 -> valeur = 1 p>

[3, 4, 2, 2, 3, 4] code> -> après la 1ère itération 1 est supprimé, de sorte index 0 -> valeur = 3 ( LOOP ne la lit pas comme il a déjà lu l'index 0, donc la boucle est la lecture indice 1 -> Valeur 4) P>

Code correct pour afficher les valeurs sans duplicates: P>

array = [1,3,4,2,2,3,4]

def duplicates(array):
    mylist = []
    for item in array:
        if item not in mylist:
            mylist.append(item)
            #array.remove(item)
    return mylist

res=duplicates(array)
print (res)


0 commentaires

0
votes

Un peu pas clairement ce que vous attendez. Si vous souhaitez obtenir toutes les valeurs uniques tout en conservant l'ordre d'occurrence, la manière canonique d'atteindre cela serait d'utiliser un collections.ordordeddict code>: xxx pré>

si vous voulez Obtenez une liste des seuls em> des doublons, c'est-à-dire des valeurs qui se produisent plus d'une fois, vous pouvez utiliser un collections.Counter code>: p>

from collections import Counter

def duplicates(array):
    return [k for k, v in Counter(array).items() if v > 1]

>>> duplicates(array)
[3, 4, 2]


0 commentaires