如何循环遍历列表并在末尾循环滚动,按步长迁移元素至新列表?
列表元素循环迁移实现方案
需求说明
给定初始列表和步长参数,需循环从原列表中按步长选取元素,将其移至新列表,直到原列表为空。若计数到列表末尾,则从头开始循环计数。
示例:
初始状态:
lst_one = [1, 2, 3, 4] iterable = 6 lst_two = []
期望结果:
lst_one = [] lst_two = [2, 1, 4, 3]
要求:禁止使用函数或类。
原代码问题分析
你当前的代码使用range固定步长遍历,无法适应列表长度动态变化的情况,且不能循环回到列表开头,导致无法完成全部元素的迁移。
解决代码
# 输入处理 input_str = input() step = int(input()) lst = input_str.split() lst = [int(i) for i in lst] new_list = [] current_index = step - 1 while lst: # 取模运算实现循环计数,确保索引在有效范围内 current_index = current_index % len(lst) # 移除并获取目标元素,添加到新列表 new_list.append(lst.pop(current_index)) # 计算下一个目标元素的索引(因元素被移除,后续元素前移,故步长需减1) current_index += step - 1 # 输出结果 print(f"lst_one = {lst}") print(f"lst_two = {new_list}")
逻辑说明
- 使用
while循环持续处理,直到原列表为空; - 每次通过
current_index % len(lst)将索引限制在当前列表的有效范围内,实现循环计数; - 用
pop()方法直接移除并获取目标元素,简化操作; - 每次计算下一个索引时,由于当前元素已被删除,后续元素的索引会前移一位,因此需在当前索引基础上加
step - 1而非step。
内容的提问来源于stack exchange,提问作者Nikoi Nikoi
相关产品推荐
相关产品推荐

