考慮以下列表:從概念循環列表中蟒創建兩個線性列表
>>> 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
值,這裏就是我想出了:
案例1: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(http://www.numpy.org/)在他們的數組實現中有一堆有用的功能。 – Xorgon
@Xorgon對不起,不允許使用Numpy。 – veritasium42