6 votes

Python soustrait une liste de chaînes de caractères d'une autre liste de chaînes de caractères.

Je voudrais soustraire une liste de chaînes de caractères où il y a plus d'un élément de la même chaîne (les opérations sur les ensembles ne sont donc pas utiles).

Exemple :

C = ['A','B','B']
D = ['B']

Je voudrais un moyen de le faire :

C - D = ['A','B']

Exemple de ce que j'ai obtenu jusqu'à présent, mais qui ne donne pas le résultat que je veux

[item for item in C if item not in D]
returns: ['A']

Voici un exemple plus élaboré pour montrer ce que je veux :

C = ['A','B', 'A','A','B','B','B','X','B']

D = ['A','B','B','Y']

C'est le résultat que je veux obtenir :

C - D = ['A', 'A', 'B', 'B','B','X']

6voto

systrigger Points 197

Sans utiliser de bibliothèques :

output = [x for x in C if not x in D or D.remove(x)]

//output: ['A', 'B']

5voto

iz_ Points 13277

Bien que la méthode d'Alain T. soit bonne, il y a une meilleure méthode qui consiste à utiliser Counter :

from collections import Counter
C = ['A','B','B']
D = ['B']
result = list((Counter(C) - Counter(D)).elements())

2voto

Alain T. Points 1649

Vous pouvez utiliser le compteur des collections :

from collections import Counter
C_D = [i for v,c in (Counter(C)-Counter(D)).items() for i in v*c]

0voto

Shivam Pandya Points 224

Vous pouvez essayer ceci :

C = ['A','B', 'A','A','B','B','B','X','B']
D = ['A','B','B','Y']

res = [ i for i in C ]

for i in D:
  if i in C:
    res.remove(i)

print(res)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X