Python вычитает список строк из другого списка строк - PullRequest
2 голосов
/ 06 марта 2019

Я хотел бы вычесть список строк, в которых имеется более одного элемента (операции с наборами бесполезны).

Пример:

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

Я хотел бы сделать так:

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

Пример того, что я получил до сих пор, но не дает результатаЯ хочу

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

Вот более подробный пример, чтобы показать, что я хочу:

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

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

Вот какой я хочу получить результат:

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

Ответы [ 4 ]

2 голосов
/ 06 марта 2019

Хотя путь Алена Т. в порядке, есть лучший способ, используя Counter:

from collections import Counter
C = ['A','B','B']
D = ['B']
result = list((Counter(C) - Counter(D)).elements())
2 голосов
/ 06 марта 2019

Вы можете использовать Счетчик из коллекций:

from collections import Counter
C_D = [i for v,c in (Counter(C)-Counter(D)).items() for i in v*c] 
1 голос
/ 06 марта 2019

Без использования каких-либо библиотек:

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

//output: ['A', 'B']
0 голосов
/ 06 марта 2019

Вы можете попробовать это:

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