手动随机化python中的列表

时间:2011-03-14 19:56:51

标签: python list random

这是一些用于手动洗牌的代码。我理解它到cards[pos], cards[randpos] = cards[randpos], cards[pos]。这里发生了什么?将卡片[pos]分配给卡片[randpos]有什么意义?

self.cards是标准顺序的扑克牌列表。

  def shuffle(self):
        n = len(self.cards)
        cards = self.cards
        for pos in range(n):
            randpos = randrange(pos,n)
            cards[pos], cards[randpos] = cards[randpos], cards[pos]

6 个答案:

答案 0 :(得分:3)

正在切换cards[pos]cards[randpos]的值。这是一种常见的Python习语:您可以通过说a, b = b, a来切换两个或多个变量的值。

请注意the standard library implementation of shuffling (random.shuffle()) is quite similar

答案 1 :(得分:2)

cards[pos], cards[randpos] = cards[randpos], cards[pos]

将卡片放在索引pos处,卡片位于索引randpos

它基本上将卡[randpos]分配给卡[pos]并将卡[pos]分配给卡[randpos]。另一种方法是

t = card[pos]
card[pos] = card[randpos]
card[randpos] = t

前者更短,更蟒蛇。

答案 2 :(得分:1)

它正在posrandpos中交换卡片的位置。

因此,例如,如果您的列表为[1,2,3,4,5,6,7]且pos为0,则首先会选择列表中1之后的索引。然后它将交换1和该索引处的数字。因此,如果randpos在第一次迭代时为3,那么在循环一次之后我们会以[4,2,3,1,5,6,7]结束。

作为旁注,使用random.shuffle()会更有效(也更可靠)。

答案 3 :(得分:1)

在python中

a, b = b, a

是你如何交换两个变量。在您的代码中,交换的内容是位置posrandpos的列表内容。

答案 4 :(得分:1)

cards[pos], cards[randpos] = cards[randpos], cards[pos]

这只是交换cards[pos]cards[randpos]

这是关于该技术的整个网页:http://blog.mithis.net/archives/ideas/64-python-swap-var

答案 5 :(得分:0)

它基本上是随机交换卡片。它将cards[pos]从牌组中取出,将cards[randpos]放在其位置,然后将cards[pos]放回cards[randpos]所在的位置。

另请注意,Python提供random.shuffle,因此您无需手动执行此操作。