假设我有一个名为“冰淇淋口味”的列表,还有两个名为“新口味”和“不可用”的列表。我想去掉“unavailable”中出现的调味品中的元素,并将新调味品中的元素添加到原来的调味品中。我写了以下程序:
for i in unavailable:
icecream_flavours.remove(i)
for j in new_flavours:
icecream_flavours.append(j)
append可以,但在程序的第一部分,它始终显示“ValueError:list.remove(x):x not in list”。有什么问题吗
谢谢
这里有两种可能性
首先,也许在
unavailable
中不应该有任何不在icecream_flavours
中的东西,但是,由于程序中其他地方的一些bug,这是不正确的。在这种情况下,您将需要调试首先出错的地方,无论是在调试器下运行还是在代码中添加print
调用。无论如何,由于问题很可能出现在您在这里没有向我们展示的代码中,因此如果这就是问题所在,我们也无能为力或者,也许某些东西出现在
unavailable
中是完全合理的,即使它不在icecream_flavours
中,在这种情况下,您只想忽略它这很容易做到,你只需要编写代码就可以了。正如^{} 的文档所解释的,它:
因此,如果要忽略在
icecream_flavours
中找不到i
的情况,只需使用try
/except
:也就是说,有更好的方法来组织代码
首先,使用正确的数据结构总是使事情变得更容易。假设你不想要重复的口味,而且口味的顺序并不重要,你真正想要的是集合,而不是列表。如果你有集合,这将是微不足道的:
即使你不能做到这一点,创建一个新的列表通常比在适当的地方修改列表要简单:
(请注意,我将
unavailable
转换为一个集合,因此我们不必强制搜索列表中的每个味道。)这些更改中的任何一个都会缩短代码,提高效率。但是,更重要的是,它们都使代码更容易推理,并且消除了出现错误的可能性,比如您正在尝试修复的错误
要添加所有不是
unavailable
的new_flavours
,可以使用列表理解,然后使用+=
操作符将其添加到现有的风格中如果原始列表中已经有你想要删除的口味,你可以用同样的方法删除它们
如果首先要从
icecream_flavours
中删除所有不可用的口味,然后添加新的口味,可以使用以下列表:相关问题 更多 >
编程相关推荐