web-dev-qa-db-fra.com

filtre de tableau en python?

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?)

59
kn3l

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]
87
Chinmay Kanchi

Oui, la fonction filter :

filter(lambda x: x not in subset_of_A, A)
43
carlpett

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.

7
eat

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]
6
Alexander Gessler

Tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))

5
NPE

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 sets 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.

3
Felix Kling

Que diriez-vous

set(A).difference(subset_of_A)
2
JoshAdel

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
2
Platinum Azure
>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])
1
Jake
>>> 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])
>>> 
1
Andreas Jung