在没有random.shuffle()python的情况下随机化元组列表

时间:2015-09-25 00:55:13

标签: python list random tuples

我有一个看起来像...的元组列表   deck=[(1,'clubs'),(1,'hearts') ...等等(13,'diamonds')

如何将此列表随机化为......

[(5,'spades'),(12,'clubs'),(3,'clubs'),......等等?

我尝试使用random.randint()似乎没有任何效果。我不能使用random.shuffle()

3 个答案:

答案 0 :(得分:3)

您想要random.shuffle()

>>> import random
>>> l = [1, 2, 3, 4, 5]
>>> random.shuffle(l)
>>> l
[2, 1, 5, 3, 4]

由于您似乎无法使用random.shuffle,或许您的老师希望您使用random.randint()获取1-13之间的随机数,然后是随机套装(心,俱乐部,钻石,黑桃),并形成一个这样的列表。请记住,您需要检查列表中是否已存在该卡。

首先尝试尝试,但如果你不能这样做,那么这就是解决方案。 我强烈建议您先使用上面提到的方法。

l = []
while len(l) < 52:
    number = random.randint(1, 13)
    suit = random.choice(['hearts', 'clubs', 'diamonds', 'spades'])
    card = (number, suit)
    if card not in l:
        l.append(card)

答案 1 :(得分:1)

如果你想要改变现有的列表,而不是创建已经洗牌的列表,那么与random.shuffle可能做的事情相似的工作并不困难(我有意避免)检查源代码以避免有罪的知识):

deck = [(1,'clubs'),(1,'hearts')...]
for i, card in enumerate(deck):
    swapi = random.randrange(i, len(deck))
    deck[i], deck[swapi] = deck[swapi], card

所有这一切都是在卡片中或之后用卡片交换卡片中的每张卡片,并且对每张卡片执行此操作,最终结果不会保留原始卡片的顺序。

答案 2 :(得分:0)

   import time
   test_list = [r for r in range(20)]
   print("The original list is : " + str(test_list))
   for i in range(len(test_list)):
    n=str(time.time())[-1]
    j=int(n)

    # Swap arr[i] with the element at random index
    if j < len(test_list):
     test_list[i], test_list[j] = test_list[j], test_list[i]

   print("The shuffled list is : " + str(test_list))