我有一个看起来像...的元组列表
deck=[(1,'clubs'),(1,'hearts')
...等等(13,'diamonds')
。
如何将此列表随机化为......
[(5,'spades'),(12,'clubs'),(3,'clubs')
,......等等?
我尝试使用random.randint()
似乎没有任何效果。我不能使用random.shuffle()
答案 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))