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
相关产品推荐
相关产品推荐

