在Python

时间:2018-02-10 22:31:31

标签: python list

所以我最近开始使用Automate the Boring the Stuff认真编程,在阅读完基本语法的章节后决定开始制作一个二十一点游戏。但是,我在处理卡片时遇到了问题。我有主甲板

deck=[2,3,4,5,6,7,8,9,'J','Q','K','A']*4

并有一个名为playerHand的单独空列表。我了解我可以使用.append和random.choice随机挑选一张卡片并将其添加到playerHand[],但这并不会从deck[]中删除这些卡片。

我能想到的唯一方法是随机生成一个数字和卡片中留下的卡片数量,将变量设置为该数字,将另一个变量设置为该索引处的卡片,将该卡片添加到{ {1}},然后最终删除playerHand[]中该索引处的卡片。

有没有办法做到不涉及2个临时变量?

2 个答案:

答案 0 :(得分:4)

是的,请使用list.pop

list.pop将删除给定索引处的值并将其返回:

In [105]: l = [1, 2, 3, 4]

In [106]: l.pop(2)  # here 2 is the index, at index 2 we have value 3
Out[106]: 3

In [107]: l
Out[107]: [1, 2, 4]

请注意,默认情况下pop弹出最后一个索引(l[-1])的值。

因此,在您的情况下,您可以random.shuffle对列表进行pop

In [108]: deck=[2,3,4,5,6,7,8,9,'J','Q','K','A']*4

In [109]: random.shuffle(deck)

In [110]: deck.pop()
Out[110]: 7

答案 1 :(得分:2)

不是随机选择元素,而是随机选择索引

然后,您可以删除索引上的元素,并使用pop将其附加到另一个list一行:

>>> import random
>>> a = [1, 2, 3, 4]
>>> b = []
>>> b.append(a.pop(random.randint(0, len(a))))
>>> 
>>> a
[1, 3, 4]
>>> b
[2]
相关问题