从lis中删除类

2024-09-27 23:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从基于类的hp的列表中删除类。我正在为D&D战役做一个大型的战斗模拟器。这是一个简单的程序,它列出了两个类,并将它们相互比较。你知道吗

我遇到了一个问题,当谈到消除死亡战斗机。如果一个战机在一轮中死亡,它工作得很好,但是当多个战机死亡时,它就不稳定了。你知道吗

def check_human_deaths():
    for i in range(len(goodguys)):
        if goodguys[i].hp <= 0:
            print('{} has died...'.format(goodguys[i].name))
            goodguys.remove(goodguys[i])

移除死亡战士会更改列表的长度,并引发索引错误:

IndexError: list index out of range

我不知道如何把死人从战场上赶出去。如有任何提示,我们将不胜感激。如果我用了一种根本错误的方式,请告诉我。你知道吗


Tags: 程序列表fordefcheck错误range模拟器
3条回答
goodguys = [ guy for guy in goodguys if guy.hp > 0 ]

这会过滤掉你阵营里所有死去的好人。你知道吗

您可以在函数中这样使用它:

def check_human_deaths():
  global goodguys
  dedguys = [ guy for guy in goodguys if guy.hp <= 0 ]
  for guy in dedguys:
      print('{} has died...'.format(guy.name))
  goodguys = [ guy for guy in goodguys if guy.hp > 0 ]

问题是,当你从goodguys中删除时,索引会减少一个。例如:

1,2,3,4

删除2

1,3,4

三的索引减少了一,大小减少了一。你知道吗

两种选择:

修改列表的副本并将其结果用作新列表:

>>> lst = [1,2,3,4,5]
>>> for i in lst[:]:
...     if i % 2:
...         result.append(i)
...
>>> lst = result
>>> lst
[1, 3, 5]

就地修改列表,但反向修改以避免弄乱索引:

>>> lst = [1,2,3,4,5]
>>> for i in lst[::-1]:
...     if not i % 2:
...         lst.remove(i)
...
>>> lst
[1, 3, 5]

相关问题 更多 >

    热门问题