En conservant l'ordre lors de l'utilisation de Python de la différence
Je suis en train de faire un jeu de différence de fonctionnement en Python:
from sets import Set
from mongokit import ObjectId
x = [ObjectId("4f7aba8a43f1e51544000006"), ObjectId("4f7abaa043f1e51544000007"), ObjectId("4f7ac02543f1e51a44000001")]
y = [ObjectId("4f7acde943f1e51fb6000003")]
print list(Set(x).difference(Set(y)))
J'obtiens:
[ObjectId('4f7abaa043f1e51544000007'), ObjectId('4f7ac02543f1e51a44000001'), ObjectId('4f7aba8a43f1e51544000006')]
J'ai besoin d'obtenir le premier élément pour la prochaine opération qui est important. Comment puis-je conserver la liste x
dans leur format d'origine?
Les ensembles sont par définition non ordonnée.
Et vous ne devriez jamais utiliser le
Le ensembles.Set type est un choix raisonnable pour quelqu'un qui a besoin de compatibilité avec les anciennes versions de Python. Le haut-set type a été modélisé d'après ensembles.Set -- elles à la fois beau travail pour la plupart des applications (bien que la version intégrée est plus rapide).
Notez que les "anciens" signifie "Python 2.3 ou avant", qui est tout beaucoup plus.
Mais pas aussi vieux que l'un de nous
Et vous ne devriez jamais utiliser le
sets
module. Utilisez le builtin set
type.Le ensembles.Set type est un choix raisonnable pour quelqu'un qui a besoin de compatibilité avec les anciennes versions de Python. Le haut-set type a été modélisé d'après ensembles.Set -- elles à la fois beau travail pour la plupart des applications (bien que la version intégrée est plus rapide).
Notez que les "anciens" signifie "Python 2.3 ou avant", qui est tout beaucoup plus.
Mais pas aussi vieux que l'un de nous
OriginalL'auteur Avinash | 2012-04-04
Vous devez vous connecter pour publier un commentaire.
Il semble que vous ayez besoin d'un ordre de jeu au lieu de régulièrement ensemble.
Python ne viennent pas avec un ensemble ordonné, mais il est facile de faire un:
Espère que cela aide 🙂
OriginalL'auteur Raymond Hettinger
Ensembles sont non ordonnée, de sorte que vous aurez besoin de mettre les résultats dans le bon ordre après avoir fait votre différence. Heureusement, vous avez déjà les éléments dans l'ordre que vous voulez, alors c'est facile.
Mais cela peut être simplifié; vous pouvez faire la différence en tant que partie de la compréhension de liste (même si c'est sans doute un peu moins clair que c'est ce que vous faites).
Vous pouvez même le faire sans la création de la
set
dey
, mais leset
augmentera la vitesse de l'adhésion les tests, ce qui permettra d'économiser que vous beaucoup de temps si une liste est grande.nvm, pensé qu'il doit être plus rapide.
Légèrement plus rapide, oui. Il sera seulement nécessaire de parcourir la liste
x
une fois au lieu de deux fois.OriginalL'auteur kindall
Vous pourriez faire ce
ou
y
ou beaucoup de temps, de travail surset(y)
plutôt quey
peut être plus rapide.Bon, je n'étais pas sûr au sujet de la vitesse, mais si vous êtes sûr à ce sujet alors je suppose que c'est le meilleur.
C'est quelque chose que vous voulez vérifier les performances de.
Pourquoi voudriez-vous jamais aller pour le
filter
version? Pas Pythonic. Aussi lalist()
emballage rendrait moins efficace sur Python 2, où une liste est déjà retourné parfilter()
.Ah oui, j'oubliais, j'ai été à l'aide de python 3... malade le changer en arrière. J'ai pensé qu'il serait utile dans python 3 comme un générateur. Aussi pourquoi est-filtre pas pythonic?
OriginalL'auteur jamylak