列表元素循环移位中Python切片的妙用

2016-10-20 董付国 Python小屋 Python小屋

之前有个文章中介绍了列表循环移位的3中方法,原文请见

Python序列循环移位的3种方法

其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如果充分利用Python中的切片技术,可以写成下面更简洁的形式:

>>> def demo(lst, k):

    x = lst[k-1::-1]

    y = lst[:k-1:-1]

    return list(reversed(x+y))

#测试用的列表

>>> lst = list(range(20))

#循环左移3位

>>> demo(lst, 3)

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2]

#循环左移5位

>>> demo(lst, 5)

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4]

#循环右移3位

>>> demo(lst, -3)

[17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]



已到达温州,宾馆有网络,正好今天有时间就发一篇吧。