2015-10-05 47 views
3

我正在解決一個編程問題,我需要在數組/列表中的任何給定位置處啓動並迭代直到我達到起始位置。我想過像循環(dequeue)這樣的循環緩衝區,但我不確定是否有迭代方法,它會這樣做。Python中的循環迭代器

考慮:

[1,10,20] 

所以當我開始在位置迭代:1我想迭代輸出爲:

10,20,1

我現在解決方案:

startPosition = 1 
data = [1,10,20] 
for i in range(0, 3): 
    pos = (startPosition+i)%3 
    print data[pos] 

還有沒有其他優雅的解決方案?還是一個容器呢?

研究:

我碰到週期從itertools但是這是一個永無止境的loop.I將不得不使用下一個方法來獲得,並在正確的位置停止。 Circular list iterator in Python

+2

您可以使用'data [startPosition:] + data [:startPosition]'代替 –

回答

4

正如你提到的,您可以使用這恰好是在標準庫中的雙端隊列:因爲默認情況下它旋轉到正確的

from collections import deque 

startPosition = 1 
data = [1,10,20] 

d = deque(data) 
d.rotate(-startPosition) 

你要否定的rotate方向。

1

在編程中如此優雅有點主觀。您的代碼易於閱讀/理解,並且是解決特定問題的最有效方式。當然你可以用較少的字節編寫代碼,但它們可能不像你的那樣清晰,所以我不會稱它們更優雅。如果您正在尋找解決分配問題的更快捷方式,您已經實現了O(n)的最佳複雜度問題。