first = [(1, text, text, 1, 2, 3),
(1, text, text, 1, 0, 3), ... (6054, text, text, 2, 2, 3)]
second = (1, 2, 3, 4, 5 ... 5412)
Y at-il un moyen plus rapide de le faire:Optimisation
data = [x for x in first if x[0] in second]
first = [(1, text, text, 1, 2, 3),
(1, text, text, 1, 0, 3), ... (6054, text, text, 2, 2, 3)]
second = (1, 2, 3, 4, 5 ... 5412)
Y at-il un moyen plus rapide de le faire:Optimisation
data = [x for x in first if x[0] in second]
Essayez ceci:
first = [(1, text, text, 1, 2, 3),
(1, text, text, 1, 0, 3), ... (1054, text, text, 2, 2, 3)]
second = (1, 2, 3, 4, 5 ... 5412)
second_set = set(second)
data = [x for x in first if x[0] in second_set]
Supposons d'abord a des éléments m et le second a n éléments.
Les jeux sont hachés, donc leur recherche est proche de O (1) donnant une efficacité globale de O (m). La recherche en second sous forme de liste donne O (n) donnant une efficacité globale de O (m * n).
Wow, merci! La vitesse d'exécution est vraiment évidente ... – Sam
Peut-être que vous voulez ce lieu du in
chèque:
data = [x for x in first if 1 <= x[0] <= 5412 ]
Merci. Mais la réponse de Jason Baker est ce que je cherchais. (J'ai utilisé un exemple très simple dans ma question mais que se passe-t-il si la deuxième liste a d'autres types de données?) – Sam
Son pas du tout clair ce que vous essayez de faire. De ce que je peux voir tous les éléments en premier seront sélectionnés – Falmarri
@Falmarri - édité pour rendre les choses plus claires. – Sam