我不明白为什么这段Python代码不起作用。

13 浏览
0 Comments

我不明白为什么这段Python代码不起作用。

我想用Python编写一个程序,给定一个单词列表和一个字母列表,它将打印出一个只包含不包含字母列表中任何字母的单词的列表。

这是单词列表:

lista = ["computador","comida","atum","pai","porco","amigo","bloco","carro","banana","janela","calculadora","caneca","prato","livro","jogo","fabrico","cruz","pedra","ar","vento"]

这是字母列表:

["a","b"]

我的问题是,当我运行这个程序时,它只打印出"None"。根据我的理解,它应该打印出所有不包含字母"a"或"b"的单词。

我真的需要帮助,因为我已经搜索了很多,但仍然不知道如何解决这个问题。

PS:如果你对一些葡萄牙语单词难以理解;

palavra = 单词

lista = 列表

listafinal = 最终列表

letra = 字母

letras_prib = 禁止的字母。

是的,列表中有些单词不包含字母"a"或字母"b",比如"porco"。

0
0 Comments

我不明白为什么这段 Python 代码不起作用。问题的原因是.remove方法不会返回一个已移除项目的新列表,而是在原列表上进行原地修改并返回None。解决方法是,可以在声明listafinal时,将其初始化为原始列表的副本,然后直接进行移除操作,无需将其赋值给变量:

listafinal = lista[:]  # 在声明 listafinal 时进行初始化
...
listafinal.remove(palavra)  # 在当前进行移除操作的位置

这样就能正确地移除指定的元素。

0
0 Comments

这段Python代码的目的是从列表中删除包含特定字母的单词。但是,代码运行后发现并没有实现预期的功能,因此出现了问题。

问题的原因是在代码的第7行,使用了双重循环来遍历列表。在内部循环中,使用了条件判断语句来检查特定字母是否存在于当前单词中。如果存在,则使用del语句删除该单词。然而,这会导致循环的迭代过程中发生了变化,从而导致循环无法正确遍历整个列表。

解决该问题的方法是修改代码的逻辑。可以使用列表推导式来创建一个新的列表,只包含不含特定字母的单词。修改后的代码如下:

lista = ["computador", "comida", "atum", "pai", "porco", "amigo", "bloco", "carro", "banana", "janela", "calculadora",
         "caneca", "prato", "livro", "jogo", "fabrico", "cruz", "pedra", "ar", "vento"]
letras_prib = ["a", "b"]
lista = [palavra for palavra in lista if not any(letra in palavra for letra in letras_prib)]
print(lista)

这段修改后的代码使用了列表推导式和any函数来创建一个新的列表。在列表推导式中,通过检查每个单词是否包含任何特定字母,来过滤出不含特定字母的单词。最后,打印输出了新的列表。

通过以上修改,代码可以正确地删除包含特定字母的单词,并输出不含特定字母的单词列表。

0