在不使用random.shuffle()python的情况下随机化元组列表

在不使用random.shuffle()python的情况下随机化元组列表,python,list,random,tuples,Python,List,Random,Tuples,我有一个元组列表,看起来像。。。 甲板=[1,'clubs',1,'hearts',依此类推到13,'diamonds' 如何将此列表随机化为以下内容: [5,'spades',12,'clubs',3,'clubs',…等等 我尝试过使用random.randint,但似乎没有任何效果。我无法使用random.shuffle您想要: 既然你似乎不能使用random.shuffle,也许你的老师想让你使用random.randint获得一个介于1-13之间的随机数,然后随机选择红桃、梅花、钻石、

我有一个元组列表,看起来像。。。 甲板=[1,'clubs',1,'hearts',依此类推到13,'diamonds'

如何将此列表随机化为以下内容:

[5,'spades',12,'clubs',3,'clubs',…等等

我尝试过使用random.randint,但似乎没有任何效果。我无法使用random.shuffle

您想要:

既然你似乎不能使用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)

如果你想洗牌一个预先存在的列表,而不是创建一个已经洗牌过的列表,那么做与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

只需将牌组中的每一张牌与其前后的一张牌进行交换,这样对每一张牌进行交换,最终结果就不会保持原来牌组的顺序。

我不允许使用随机。洗牌还有其他方法吗?@DrakeRobison为什么不允许使用随机。洗牌?哦,我想我知道你的老师想要什么方法。Le我不能做点什么吗out@DrakeRobison抱歉,花了这么长时间。我正在尝试格式化我的答案,以便有一个扰流板标签,这样你就可以试一试。我强烈建议你先试一试,并在我的回答中给出解释answer@TerryA当前位置我否决了这个答案,因为它没有回答OP提出的实际问题,即如何回答要在不使用random.shuffle的情况下洗牌一个预先存在的列表。但是,因为OP现在说这是想要的,所以我撤回了否决票。您可以使用random模块中的任何内容吗?一位更有经验的同事告诉我避免使用这种方法。显然,使用Numpy来实现这一点要好得多。请参阅:@LaurieBamber:这不是你链接中提到的简单解决方案。该解决方案将每个位置与其他可能的位置交换一次,也就是说,它将索引0与从0到n的随机索引交换,然后将索引1与从0到n的随机索引交换,等等。我的解决方案使用random.randrangei,lendeck而不是randrangelendeck,最终得到相同的结果组合属性,如Knuth Fisher-Yates在链接中洗牌,将0与0-n交换,然后将1与1-n交换,等等,本质上是从剩余的未选择值集中选择一个值来占据每个插槽。至于使用numpy,OP明确禁止使用random.shuffle;我怀疑使用numpy等价物是否会被接受表。很公平,我不知道如何对此进行评论,我的同事只是说,他认为这种方法可能会产生与所提供文章中列出的问题相同的问题。random是numpy库的一部分吗?我认为random是独立的。@LaurieBamber:你提出numpy是实现这一点的更好方法,这是我提到它的唯一原因;不,random和numpy.random不一样,但它们都是为您工作的预定义API,OP试图在不使用预定义API的情况下实现,因为老师禁止使用。如果他们在Python课程中这么早,跳到numpy第三方,比Python内置更神奇的东西不会教给他们正确的方法接近。
   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))
   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))