如何用Python实现列表半数元素翻转后重组得到目标序列
实现逻辑
你要的功能本质是:保留列表所有偶数索引(从0开始计数)的元素不变,提取所有奇数索引的元素翻转后,再依次填回原奇数索引位置即可。你给出的示例完全符合这个逻辑:
示例输入奇数索引元素为
[8, 2, 18, 0],翻转后为[0, 18, 2, 8],替换回原奇数位置后正好得到你要的输出结果。
修改后的代码
def flip_half(lst): # 先拷贝原列表,避免修改传入的原始列表 res = lst.copy() # 提取所有奇数索引元素并翻转 odd_elements = res[1::2] reversed_odd = odd_elements[::-1] # 将翻转后的元素依次赋值回奇数索引位置 for idx, pos in enumerate(range(1, len(res), 2)): res[pos] = reversed_odd[idx] return res # 测试用例 test_list = [1, 8, 7, 2, 9, 18, 12, 0] print(flip_half(test_list)) # 输出:[1, 0, 7, 18, 9, 2, 12, 8]
注意事项
- 不要用
list作为参数名,它是Python内置类型的关键字,会覆盖原有功能导致后续报错 - 如果你不需要保留原列表,可以直接修改传入的列表,不需要做copy操作
- 该实现兼容长度为奇数的列表,最后一个偶数索引的元素会保留不变
内容的提问来源于stack exchange,提问作者Keegry
相关产品推荐
相关产品推荐

