如何解决错误:list.removex:x不在列表中,我不明白为什么
我正在研究一款基于文本的小游戏,但在从列表中删除元素时遇到问题。
这是要运行的引发错误ValueError: list.remove(x): x not in the list
的代码,但我不知道为什么。
LVL = 'lvl'
DAMAGE = 'damage'
Items = {
'Sword':{
LVL : 1,DAMAGE : 5,},'Wand':{
LVL : 1,DAMAGE : 3,}
class player():
def __init__(self):
self.inventory = []
class item():
def __init__(self,name: str,**kwarg):
self.name = name
self.dmg = kwarg.get(DAMAGE)
self.lvl = kwarg.get(LVL)
def __str__(self):
return self.name
if __name__ == "__main__":
user = player()
for i in Items.keys():
it = item(i,**Items[i])
user.inventory.append(it)
# check user's inventory
print('Inventory after append items :')
for i in user.inventory:
print(i)
# let's say i want the user to drop items
items_name = [i for i in Items.keys()]
items_to_drop = [item(i,**Items[i]) for i in items_name]
for i in items_to_drop:
user.inventory.remove(i)
我的猜测是,即使user.inventory
中的项目与items_to_drop
中的项目相同,程序也会将其视为两个不同的变量。在这种情况下,我看不到要执行的操作,即从user.inventory
中删除要删除的项目,因为列表中有要删除的项目(因为我无法直接遍历user.inventory
吗?)
如果这个问题以前已经回答过,我深表歉意。我已经搜索过了,但是没有成功。
解决方法
最后,如注释中所建议,我不得不覆盖类__eq__()
的{{1}}方法,以便Python 看到,如果两个相同项实际上在item
和user.inventory
中。可行!
如果需要,我只是做了
items_to_drop
,
一个简单的解决方案:
# let's say i want the user to drop items
items_name = [i for i in Items.keys()]
items_to_drop = [item(i,**Items[i]) for i in items_name]
for i in items_to_drop:
try:
user.inventory.remove(i)
except:
continue
另一个更好的一个:
# let's say i want the user to drop items
items_name = [i for i in Items.keys()]
items_to_drop = [item(i,**Items[i]) for i in items_name]
invetory_copy = inventory.copy()
for i in inventory:
if i in items_to_drop:
inventory_copy.remove(i)
inventory = inventory_copy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。