gpt4 book ai didi

python - 如果要删除项目,如何使用 'for x in list'

转载 作者:行者123 更新时间:2023-12-01 02:25:47 25 4
gpt4 key购买 nike

我正在用 python 编写一个文本冒险。我有一个负责一切的警长 NPC item player.inventory 中的对象,如果 item.name == "dead goblin"然后该项目将从列表中删除,并且 goblins_taken += 1 :

    if "sheriff" in player.action and "talk" in player.action and player.location == sheriff:
goblins_taken = 0
for item in player.inventory:
if item.name == "dead goblin":
goblins_taken += 1
player.inventory.remove(item)
write("The sheriff says, 'Good job. You have killed " + str(goblins_taken) + " goblins!")

这段代码的问题在于,如果玩家杀死了 2 个妖精,治安官会说玩家杀死了 1 个妖精,而不是 2 个。

我尝试在 IDLE 中简化问题,并意识到这是一个索引问题:

>>> foo = ['a', 'b', 'c', 'd', 'e']
>>> foo[2]
'c' # With b
>>> foo.remove('b')
>>> foo[2]
'd' # Without b, index is shifted down

有没有比list.remove()更好的方法从列表中删除项目?或者有什么办法可以解决这个问题吗?

最佳答案

您永远不应该修改正在迭代的列表!您可以通过创建第二个列表来解决它:

temp_inventory = list(player.inventory)
for item in player.inventory:
if item.name == "dead goblin":
goblins_taken += 1
temp_inventory.remove(item)
player.inventory = temp_inventory

这个我已经尝试过并且有效:

a = [1,2,3,2,1]
b = list(a)
elems_removed = 0
for elem in a:
if elem == 2:
elems_removed += 1
b.remove(elem)
print(a)
print(b)
a=b
print(a)
print(elems_removed)

关于python - 如果要删除项目,如何使用 'for x in list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47420544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com