Я хочу удалить элементы из списка из строки, когда элементы списка находятся в строке - PullRequest
4 голосов
/ 29 апреля 2020

Предположим,

a = ['ab','bcd','efg','h']
b = ['wiab','wbcdz','rh','ksw','erer']

Я хочу удалить любой из символов, перечисленных в a, из списка b. результат должен быть `['wi', 'wz', 'r', 'k sh', 'erer']

Это код, который я пробовал:

result = []
for i in b:
    if not any(word in i for word in a):
        result.append(word)

Но этот код возвращает result = ['ksw','erer']

, пожалуйста, помогите мне

Ответы [ 3 ]

3 голосов
/ 29 апреля 2020
def function(a,b):
    result = []
    for i in a:
        for word in b:
            if i in word:
                result.append(word.replace(i,''))
    return result

Функция any в вашем коде не нужна. Вам нужно l oop через оба списка, затем проверить, находится ли ваша подстрока в строке другого списка, вызвать метод replace для вашего слова, содержащего подстроку, а затем добавить его в список результатов

1 голос
/ 29 апреля 2020

Другие решения дают вам то, что вы хотите, так что вот один для развлечения. Вы можете использовать functools.reduce с пользовательской функцией.

from functools import reduce

a = ['ab','bcd','efg','h']
b = ['wiab','wbcdz','rh','ksw','erer']


def remove(x, y):
    return x.replace(y, '')

out = [reduce(remove, a, i) for i in b]

, давая

['wi', 'wz', 'r', 'ksw', 'erer']

Редактировать: Возможно, наименее понятный способ, которым вы можно было бы написать это как однострочник с лямбдой:)

[reduce(lambda x, y: x.replace(y, ''), a, i) for i in b]
1 голос
/ 29 апреля 2020
a = ['ab','bcd','efg','h']
b = ['wiab','wbcdz','rh','ksw','erer']

result = []
for i in b:
    for word in a:
        if word in i:
            result.append(i.replace(word, ''))

print(result)

Выход:

['wi', 'wz', 'r']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...