Сохранить элементы в списке кортежей, содержащихся в другом списке - PullRequest
2 голосов
/ 20 марта 2019

поэтому у меня есть список плохих слов:

badWords = ["nu", "să", "o", "și", "de", "i", "pe", "cu", "ce", "mai", "la", "în", "un", "se", "mi", "eu", "ca",
                "că"]

И у меня есть этот двойной список в этом формате:

word_list = [(673, 'de'), (606, 'și'), (518, 'o'), (486, 'să'), (484, 'nu'), (469, 'i'), (348, 'pe'), (309, 'răzvan'), (308, 'cu'), (304, 'ce'), (302, 'mai')]

Я попытался сделать это, чтобы удалить запись, которая соответствует моему списку плохих слов

for x in range(len(word_list)):
    for y in range(len(word_list[x])):
        for word in badWords:
            if(word_list[x][y] == word):
                word_list.remove(x)

Но я получаю это:

Ошибка: list.remove (x): x отсутствует в списке

Ответы [ 3 ]

3 голосов
/ 20 марта 2019

Вам лучше создать новый список с списком и оставить только те кортежи со вторым элементом, которого нет в badWords:

[i for i in word_list if i[1] not in badWords]
# [(309, 'răzvan')]
0 голосов
/ 20 марта 2019

Оператор in работает намного быстрее с наборами, чем со списками:

s = set(badWords)
list(filter(lambda x: x[1] not in s, word_list))
# [(309, 'răzvan')]
0 голосов
/ 20 марта 2019

Вы не должны удалять элементы во время итерации.Вы можете сделать так:

for word in word_list[:]:
    if word[1] in badWords:
        word_list.remove(word)

print(word_list)
# [(309, 'răzvan')]

Вы можете прочитать wtfpython , это может помочь вам.

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