python - 如何从列表中删除项目并将其添加到同一列表的末尾
问题描述
我有一个 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)
card_deck[rand1], card_deck[rand2] = card_deck[rand2], card_deck[rand1]
ite += 1
推荐阅读
- c# - 值更改时如何让 WPF DataGrid 求助?
- python - “从 django ......导入......”未解决的导入错误
- typescript - TypeScript:“文档”类型上不存在属性“slug”
- python - (python)具有可变参数的函数
- ios - 设置 UICollectionViewCompositionalLayout 时未调用 UIScrollView 委托方法
- bellman-ford - Bellman-Ford 算法短前驱数组
- python - 在 Display 和 Textfile 中输出序列 (Collatz)
- google-sheets - 需要根据excel中的每周生产数量返回订单的生产完成日期
- r - 通过粘贴字符作为输入来创建函数
- c - C 的激活记录中的全局变量在哪里?