Par exemple, j'ai deux listes
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = [6, 9, 12]; # the subset of A
the result should be [7, 8, 10, 11]; the remaining elements
Existe-t-il une fonction intégrée dans python pour ce faire?)
Si l'ordre n'est pas important, vous devez utiliser set.difference
. Toutefois, si vous souhaitez conserver l’ordre, il vous suffit de comprendre la liste.
result = [a for a in A if a not in subset_of_A]
EDIT: Comme le dit Delnan, les performances seront considérablement améliorées si subset_of_A
est un set
réel, car la vérification de l’appartenance à un set
est O(1) par rapport à O(n) pour une liste.
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = set([6, 9, 12]) # the subset of A
result = [a for a in A if a not in subset_of_A]
Oui, la fonction filter
:
filter(lambda x: x not in subset_of_A, A)
Non, il n'y a pas de fonction de construction dans python pour le faire, simplement parce que:
set(A)- set(subset_of_A)
vous fournira la réponse.
set(A)-set(subset_of_A)
vous donne le jeu de résultats souhaité, mais il ne conservera pas l'ordre d'origine. Ce qui suit est la préservation de l'ordre:
[a for a in A if not a in subset_of_A]
Tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
Cela a été demandé il y a quelques jours (mais je ne le trouve pas):
>>> A = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A = set([6, 9, 12])
>>> [i for i in A if i not in subset_of_A]
[7, 8, 10, 11]
Il serait peut-être préférable d'utiliser set
s depuis le début, en fonction du contexte. Ensuite, vous pouvez utiliser définir les opérations comme le montrent les autres réponses.
Toutefois, la conversion des listes en ensembles et en retour uniquement pour ces opérations est plus lente que la compréhension des listes.
Que diriez-vous
set(A).difference(subset_of_A)
Utilisez le type Set
:
A_set = Set([6,7,8,9,10,11,12])
subset_of_A_set = Set([6,9,12])
result = A_set - subset_of_A_set
>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])
>>> A = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A = [6, 9, 12];
>>> set(A) - set(subset_of_A)
set([8, 10, 11, 7])
>>>