You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何循环删除列表第n项(从上次删除后一项开始计数)直到剩1项

循环删除列表指定位置元素(约瑟夫环)实现方案

你描述的需求属于经典的约瑟夫环问题,核心要解决的是记录每一轮计数的起始位置,不需要每次都从列表头部重新计数。

修正后代码

n = int(input())
# 避免使用list作为变量名,会覆盖Python内置关键字
item_list = ['One', 'Two', 'Three', 'Four', 'Five']
# 记录每一轮计数的起始索引,初始从第一个元素开始
start_idx = 0

while len(item_list) > 1:
    # 计算待删除元素的索引:起始位置 + 步长n - 1(索引从0开始,计数从1开始需要对齐),对当前列表长度取模避免越界
    delete_idx = (start_idx + n - 1) % len(item_list)
    # 执行删除
    item_list.pop(delete_idx)
    print(f"当前剩余列表:{item_list}")
    # 下一轮计数从被删元素的后一位开始,删除后后续元素前移一位,后一位元素刚好落在本次删除的索引位置
    start_idx = delete_idx

print("最终剩余元素:", item_list[0])

逻辑说明

  • 测试输入n=3时,执行结果与预期一致,最终输出Four
  • 新增start_idx变量记录每一轮的计数起点,避免每次从头遍历
  • 索引计算时减1是为了对齐「计数从1开始、列表索引从0开始」的差异
  • 每次删除后直接将start_idx赋值为本次删除的索引:元素删除后,原被删位置的后一个元素会自动前移到该索引位置,刚好对应下一轮的计数起点

内容的提问来源于stack exchange,提问作者kujous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:54:02