【发布时间】:2017-05-18 04:43:20
【问题描述】:
考虑以下列表:
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> list(enumerate(circle))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h')]
如果circle 被概念化为一个循环列表,即circle[0] 连接到circle[7],给定一个start 索引和一个end 索引,其中start != end,我想构造两个表示线性的列表顺时针和逆时针方向的遍历顺序。
根据start 和end 的值,我得出以下结论:
案例一:start < end
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> start, end = 1, 6
>>> clockwise = circle[start:end+1]
>>> clockwise
['b', 'c', 'd', 'e', 'f', 'g']
>>> counter_clockwise = circle[start::-1] + circle[:end-1:-1]
>>> counter_clockwise
['b', 'a', 'h', 'g']
案例2:start > end
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> start, end = 6, 1
>>> clockwise = circle[start:] + circle[:end+1]
>>> clockwise
['g', 'h', 'a', 'b']
>>> counter_clockwise = circle[start:end-1:-1]
>>> counter_clockwise
['g', 'f', 'e', 'd', 'c', 'b']
有没有一种pythonic/更高效/更简单的方式来构建这两个列表?
【问题讨论】:
-
我没有确切的答案给你,但是 Numpy (numpy.org) 在他们的数组实现中有很多有用的特性。
-
@Xorgon 抱歉,不允许使用 Numpy。
标签: python circular-list