P119: Rotate a list N palces to left

向左轮转列表N个位置。比如,给定列表[a, b, c, d, e, f, g, h]和N为3,向左轮转后为[d, e, f, g, h, a, b, c]。测试用例:

from python99.lists.p119 import rotate def test_rotate(): assert rotate([1, 2, 3, 4, 5, 6], 2) == [3, 4, 5, 6, 1, 2] assert rotate([1, 2, 3, 4, 5, 6], 5) == [6, 1, 2, 3, 4, 5] assert rotate([1, 2, 3, 4, 5, 6], -2) == [5, 6, 1, 2, 3, 4]

当向左轮转一个位置时,等同于将列表拆分为头元素和剩余列表,调换位置后再拼接起来。

而向左轮转N个位置可转换为N次向左轮转一个位置。且因轮转而被移到列表末尾的元素依旧保持着原来的顺序。所以,N次向左轮转可以转化为,将列表切分为两个列表,第一个列表长度为N,再调换两个列表位置,最后拼接。

代码实现:

# Rotate a list N places to the left. def rotate(l, n): return l[n:len(l)]+l[0:n]

results matching ""

    No results matching ""