设计一个算法,对一个列表从起始位置起每m个元素进行一次

设计一个算法,对一个列表从起始位置起每m个元素进行一次逆置,并分析其时间复杂度。如对列表【1,2,3,4,5,6,7,8,9,10】每4个元素进行一次逆置,则列表变为【4,3,2,1,8,7,6,5,10,9】

答案
def reverse_per_m(lst, m):
    res = lst.copy()
    n = len(res)
    for i in range(0, n, m):
        low = i
        high = min(i + m - 1, n - 1)
        # 不管块大小,只要low<high就翻转
        while low < high:
            res[low], res[high] = res[high], res[low]
            low += 1
            high -= 1
    return res

arr = [1,2,3,4,5,6,7,8,9,10]
print(reverse_per_m(arr,4))
#输出:[4, 3, 2, 1, 8, 7, 6, 5, 10, 9]

题目信息

题号:8187
题型:简答题
知识点:Python
难度:普通