我如何从列表中删除项目并将其添加到同一列表的末尾

问题描述 投票:0回答:2

我有一个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()
python list shuffle
2个回答
1
投票

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

0
投票
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]
© www.soinside.com 2019 - 2024. All rights reserved.