【问题标题】:How to put an object inside a list in python如何将对象放入python中的列表中
【发布时间】:2022-07-06 03:52:02
【问题描述】:

我正在用 Python 构建一个二十一点游戏。我的设置是每个玩家对象都有一个手对象,它只是一个列表self.hand = [],可以用卡片对象self.hand = [<__main__.Card object at 0x7fb2c66b27f0>, <__main__.Card object at 0x7fb2c66b2730>] 填充。我想在这个游戏中引入分裂,所以如果两张牌的价值相同,那么它们就会被分成两手牌。我想让我的最终手牌属性看起来像这样self.hand = [[<__main__.Card object at 0x7fb2c66b27f0>], [<__main__.Card object at 0x7fb2c66b2730>]],但我不能只使用list() 将卡片对象包装到列表中。谁能建议如何做到这一点?

【问题讨论】:

  • self.hand.append([card_object])

标签: python arrays list oop nested


【解决方案1】:

您可以对列表进行切片或解构以将其分成多个列表。

这是一个使用解构的示例(给定一个包含两个相同元素的列表,将两个元素分成两个列表,每个列表一个元素):

>>> hand = [10, 10]
>>> if len(hand) == 2 and len(set(hand)) == 1:
...     [hand1, hand2] = hand
...     hand = [[hand1], [hand2]]
...
>>> hand
[[10], [10]]

这是一个使用切片的方法(给定一个相同元素的列表,将其分成两半):

>>> hand = [10, 10]
>>> if len(set(hand)) == 1:
...     hand = [hand[:len(hand)//2], hand[len(hand)//2:]]
...
>>> hand
[[10], [10]]

另一种选择是使用列表推导将每个元素包装在另一个列表中:

>>> hand = [10, 10]
>>> if len(set(hand)) == 1:
...     hand = [[card] for card in hand]
...
>>> hand
[[10], [10]]

您如何将其应用于您的 Card 对象取决于这些对象的定义和构造方式,您的问题中没有包含这些内容。请注意,使用len(set(hand)) 来确定卡片是否相同只有在Card 实现__hash__ 以使其自身可散列时才有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2015-12-16
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多