Python: supprime les doublons de la liste s'ils sont exactement les mêmes, y compris l'ordre des éléments
Je sais que des questions similaires ont été posées de nombreuses fois, sur un Débordement de Pile, mais j'ai besoin de supprimer les doublons de tuples à partir d'une liste, mais pas seulement si leurs éléments correspondent, leurs éléments doivent être dans le même ordre. En d'autres termes, (4,3,5)
et (3,4,5)
permettrait à la fois d'être présents dans les résultats, alors que si il y avait deux(3,3,5)
et (3,3,5)
un seul serait dans la sortie.
Plus précisément, mon code est:
import itertools
x = [1,1,1,2,2,2,3,3,3,4,4,5]
y = []
for x in itertools.combinations(x,3):
y.append(x)
print(y)
dont la sortie est assez long. Par exemple, dans la sortie, il devrait être à la fois (1,2,1)
et (1,1,2)
. Mais il ne devrait être qu'un (1,2,2)
.
source d'informationauteur 5813 | 2013-10-17
Vous devez vous connecter pour publier un commentaire.
set
prendra soin de cela:set
ne supprimer que exacte les doublons.Ce que vous avez besoin est unique permutations plutôt que de combinaisons:
Qui est, (1,2,2) et (2,1,2) sera considéré comme de la même combinaison et un seul d'entre eux sera retourné. Ils sont, cependant, les différentes permutations. Utilisation
set()
de supprimer les doublons.Ensuite, si vous voulez trier les éléments au sein de chaque n-uplet et ont également l'ensemble de la liste triée, vous pouvez le faire:
Pas besoin de faire
for
boucle,combinations
donne un générateur.Ce sera probablement faire ce que vous voulez, mais c'est vaste overkill. C'est un faible niveau de prototype pour un générateur qui peut être ajouté à
itertools
un jour. Il est de faible niveau pour faciliter la re-mise en œuvre dans C. OùN
est la longueur de l'objet iterable d'entrée, il exige le pire des cas de l'espaceO(N)
et ne à la plupart desN*(N-1)//2
élément comparaisons, quel que soit le nombre d'anagrammes sont générés. Ces deux sont optimales 😉Utilisation comme suit:
Il n'y aura pas de doublons dans la sortie. Remarque: c'est Python 3 code. Il a besoin de quelques modifications pour s'exécuter sous Python 2.
Vous ont été vraiment proche. Juste obtenir des permutations, pas de combinaisons. Importance de l'ordre dans les permutations, et il n'est pas dans les combinaisons. Donc (1, 2, 2) une permutation de (2, 2, 1). Cependant (1, 2, 2) est considérée comme une singulière combinaison de 1 et de deux 2s. Donc (2, 2, 1) n'est pas considéré comme une combinaison particulière de (1, 2, 2).
Vous pouvez convertir votre liste y à un ensemble de sorte que vous supprimer les doublons...
Et voilà, vous avez terminé. 🙂
À l'aide d'un ensemble doit probablement travailler. Un jeu est en fait un conteneur qui ne contient pas d'éléments dupliqués.