如何使用Python按顺序从列表中删除对象

如何使用Python按顺序从列表中删除对象,python,Python,我正在尝试创建一个函数,throw\u cards,它获取一个手部对象,其中包含一定数量的卡对象,打印一条消息,并从self.cards列表中删除该卡。 这就是我目前拥有的: ability = {'Clubs':5, 'Diamonds':6, 'Hearts':7, 'Spades':8} class Hand(Deck): """Represents a hand of playing cards.""" def __init__(self, label=

我正在尝试创建一个函数,
throw\u cards
,它获取一个手部对象,其中包含一定数量的卡对象,打印一条消息,并从
self.cards
列表中删除该卡。 这就是我目前拥有的:

ability = {'Clubs':5, 'Diamonds':6, 'Hearts':7, 'Spades':8}

class Hand(Deck):
        """Represents a hand of playing cards."""
        def __init__(self, label=''): #name for hand? idk
            self.cards = []
            self.label = label

        def throw_cards(self):
            for card in self.cards:
                print(card, 'deals', ability[Card.suit_names[card.suit]],
                      'damage!')
                self.cards.remove(self.cards[0])
q = Hand()
w= Deck()
w.shuffle()
w.move_cards(q, 6)     
以这种方式使用函数,我最终得到

>>> q.throw_cards()
King of Hearts deals 7 damage!
5 of Clubs deals 5 damage!
10 of Hearts deals 7 damage!
>>> print(q)
3 of Diamonds
10 of Hearts
10 of Spades

问题似乎在于,它没有按正确的顺序取出卡片。我也尝试过使用
.pop()
.remove()
的不同索引,但无法打印,然后从手中取出卡片。另外,请让我知道,如果这个问题本身是好的,在格式和信息方面!我对stackoverflow非常陌生。

您正在修改正在迭代的列表,这导致了您看到的问题

既然您似乎想删除所有卡片,为什么不在打印完后将
self.cards
重新绑定到空列表中呢

def throw_cards(self):
    for card in self.cards:
        print(card, 'deals', ability[Card.suit_names[card.suit]], 'damage!')
    self.cards = []

您正在修改正在迭代的列表,这导致了您看到的问题

既然您似乎想删除所有卡片,为什么不在打印完后将
self.cards
重新绑定到空列表中呢

def throw_cards(self):
    for card in self.cards:
        print(card, 'deals', ability[Card.suit_names[card.suit]], 'damage!')
    self.cards = []

谢谢你的解决方案!当然,这是假设的,但是我想让卡在<代码>打印< /代码>之后被删除的原因是,如果我想停止在迭代(错误的单词?)中间扔卡。例如,如果一个敌人在投掷第三张牌后获得0点生命。尽管如此,我知道我必须重写这个方法才能让它像那样运行。谢谢你的解决方案!当然,这是假设的,但是我想让卡在<代码>打印< /代码>之后被删除的原因是,如果我想停止在迭代(错误的单词?)中间扔卡。例如,如果一个敌人在投掷第三张牌后获得0点生命。尽管如此,我知道我必须重写该方法,使其具有那样的行为。