2012-04-17 29 views
3

比方說,我有一個列表:移動開始早在Python中

[A,B,C,d,E,F]

給定一個指標,比方說3,什麼是一種pythonic方法,可以在列表前面的索引 之前刪除所有內容,然後將其添加到後面。

所以,如果我得到了指數3,我要重新排序的列表作爲 [d,E,F,A,B,C]

+3

考慮列表是否是最佳選擇。根據你的需要,一個'collections.dequeue'或者ringbuffer可能是一個更高效的數據結構 – 2012-04-17 23:41:06

+1

你真的不想把它做成一個大的列表,因爲它們被實現爲連續的數組。如果你真的需要這樣做,編寫一個函數來使用局部變量作爲存儲寄存器來完成它 - 你仍然會得到獎勵計數,但不會以潛在的悲劇性內存分配模式結束。 – 2012-04-17 23:53:26

+0

好點,幸好我知道這份名單會相當短(少於100個元素),所以我認爲這是沒有問題的。 – themaestro 2012-04-22 18:33:17

回答

3

使用切片操作 例如,

myList = ['a', 'b','c', 'd', 'e', 'f'] 
    myList[3:] + myList[:3] 

['d', 'e', 'f', 'a', 'b', 'c'] 
4
>>> l = ['a', 'b', 'c', 'd', 'e', 'f'] 
>>> 
>>> l[3:] + l[:3] 
['d', 'e', 'f', 'a', 'b', 'c'] 
>>> 

,或引入一個功能:

>>> def swap_at_index(l, i): 
...  return l[i:] + l[:i] 
... 

>>> the_list = ['a', 'b', 'c', 'd', 'e', 'f'] 
>>> swap_at_index(the_list, 3) 
['d', 'e', 'f', 'a', 'b', 'c'] 
2
def foo(myList, x): 
    return myList[x:] + myList[:x] 

應該做的伎倆。

這樣稱呼它:

>>> aList = ['a', 'b' ,'c', 'd', 'e', 'f'] 
>>> print foo(aList, 3) 
['d', 'e', 'f', 'a', 'b', 'c'] 

編輯哈哈所有的答案都是一樣的...

1

的Python的方式是這sdolan說,我只能添加內嵌方式:

>>> f = lambda l, q: l[q:] + l[:q] 

的話,你可以像使用:

>>> f([1,2,3,4,5,6], 3) 
[4, 5, 6, 1, 2, 3]