【问题标题】:Python 3: How to move an item from list x to list y and remove it from list x?Python 3:如何将项目从列表 x 移动到列表 y 并将其从列表 x 中删除?
【发布时间】:2016-09-25 03:13:19
【问题描述】:

我正在尝试将.append 列表中的随机卡片 DeckMyHand,同时将其从 Deck 中删除。

import random

Deck = []
MyHand = []
CardsPicked = 0

for Cards in range(1, 101):
    Deck.append(Cards)

while(CardsPicked < 8):
    MyHand.append(random.choice(Deck))
    CardsPicked = CardsPicked + 1

须知:我已经能够添加卡,但无法将其移除。

我试过Deck.remove(random.choice),但它说选择不在甲板上。

【问题讨论】:

    标签: python list python-3.x random append


    【解决方案1】:
    MyHand.append(Deck.pop(random.choice(range(len(Deck)))))
    

    pop 获取要删除的索引并返回已删除的项目)

    更接近您的代码的是:

    card = random.choice(Deck)
    Deck.remove(card)
    MyHand.append(card)
    

    【讨论】:

    • 一个非常奇怪的deck.deal实现的好答案;P +1
    • random.randrange 怎么样?
    【解决方案2】:

    你通常会洗牌

    Deck.shuffle()
    

    然后你只需从一端取出卡片

    hand.append(Deck.pop())
    

    通常,当你发牌时,你是从牌组中随机的地方抽牌还是洗牌并传递牌

    【讨论】:

    • 它是random.shuffle(Deck)。如果您只需要 8 张随机卡片,则洗牌整个牌组的效率有点低,但很可能少于次调用从列表中的随机位置删除项目,这是明显的替代方案。耻辱random没有“将随机选择交换到最后”功能。
    • 我试过这样做,但我知道我做得不对。你能把它放在更好的上下文中,这样我就可以理解并将它应用到我的代码中。
    • shuffle 将卡片放入其中后...你用 this`hand.append` 行替换 hand.append
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2015-05-25
    • 2022-12-20
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2016-01-26
    相关资源
    最近更新 更多