从列表中删除单词

Removing a word from a list

所以我得到了一个名字列表,我正试图从列表中删除这些名字。但不知何故,它并没有按照我想要的方式工作。任何帮助将非常感激。我认为问题出在替换功能上,但我不确定。

函数:

@pyqtSlot(str, str)
def rapportmail (self, email, wachtwoord):

    credentials = Credentials(email, wachtwoord)
    acc = Account(email, credentials=credentials, autodiscover=True)

    cursor.execute("SELECT DISTINCT Naam FROM Klant")
    updatedklant = str(cursor.fetchall())
    
    test = updatedklant

    for item in acc.inbox.all().order_by('-datetime_received')[:500]:

        inboxmail = str(item.sender).split("'")
        currentinboxmail = inboxmail[3]

        cursor.execute("SELECT DISTINCT Klant FROM Mail WHERE Mail=?", currentinboxmail)
        currentklant = str(cursor.fetchall())

        remove_characters = ["(",")",",","]","["]
        for characters in remove_characters:
            currentklant = currentklant.replace(characters, "")

        if currentklant not in updatedklant:

            for idx, elem in enumerate(test):
                if elem[0] == currentklant:
                    test.pop(idx)

现在打印这个:

currentklant == 'alerttestting'

test == [('alerttestting', ), ('emretestingsystems', ), ('jarnodebaas', ),('yikes', )]

结果应该是:

currentklant == 'alerttestting'

test ==[('emretestingsystems', ), ('jarnodebaas', ),('yikes', )]

应该可以完美运行

[('alerttestting',), ('emretestingsystems',), ('jarnodebaas',), ('yikes',)]

if __name__ == "__main__":
    currentklant = 'alerttestting'
    test = [('alerttestting',), ('emretestingsystems',), ('jarnodebaas',), ('yikes',)]
    for idx, elem in enumerate(test):
        if elem[0] == currentklant:
            test.pop(idx)

[('emretestingsystems',), ('jarnodebaas',), ('yikes',)]

永远不要将 cursor.fetchall() 的结果转换为 str,然后删除您不喜欢的字符。 这将成为一个巨大的麻烦源。如果名称本身包含这些字符之一,如 "Bond, James""O'Brien" 怎么办?

将其保存为 Python 对象(可能是列表或元组)并以该形式处理它。

在这种情况下,您可能想要这样的东西:

    ...
    updatedklant = cursor.fetchall()  # No more str()
    ...
            currentklant = cursor.fetchall())  # No more str()
            ...
            test = [klant for klant in updatedklant if klant != currentklant]