我有一个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)时间运行。而您可以在固定时间内访问列表中的项目。
如果您是在做家庭作业,请尝试先自行实施,再看看下面我的回答。