我有一个52个元组(一副扑克牌)的列表,我试图在不使用random.shuffle的情况下对其进行洗牌(不允许在该项目中使用它)。我想做的是创建2个随机索引,从列表中删除那些项,然后在列表的最前面放置1个,在列表的末尾放置1个。
我可以创建随机#,但不确定如何移动它们。似乎.pop是我最好的方法,但不确定是否正确。
def shuffle():
ite = 0
while ite <= 1000:
rand1 = randint(0, len(card_deck) -1)
rand2 = randint(0, len(card_deck) -1)
card_deck.pop[rand1]
card_deck.append(rand1)
ite += 1
shuffle()
Pop的时间复杂度在这种情况下并不理想。将rand1的值存储为临时变量并将其替换为rand2的值,然后将rand2的值替换为临时变量会更有意义。
例如,如果您有1000个项目的列表,而您想弹出第500个项目,它将在N(500)时间运行。而您可以在固定时间内访问列表中的项目。
如果您是在做家庭作业,在没有自己先实施的情况下,请不要看下面我的回答。
def shuffle():
ite = 0
while ite <= 1000:
rand1 = randint(0, len(card_deck) - 1)
rand2 = randint(0, len(card_deck) - 1)
temp = card_deck[rand1]
card_deck[rand1] = card_deck[rand2]
card_deck[rand2] = temp
ite += 1
while ite <= 1000:
rand1 = randint(0, len(card_deck) -1)
rand2 = randint(0, len(card_deck) -1)
card1 = card_deck.pop[rand1]
card2 = card_deck.pop[rand2]
card_deck=[card1,*card_deck, card2]