比方說,我有一個列表:移動開始早在Python中
[A,B,C,d,E,F]
給定一個指標,比方說3,什麼是一種pythonic方法,可以在列表前面的索引 之前刪除所有內容,然後將其添加到後面。
所以,如果我得到了指數3,我要重新排序的列表作爲 [d,E,F,A,B,C]
比方說,我有一個列表:移動開始早在Python中
[A,B,C,d,E,F]
給定一個指標,比方說3,什麼是一種pythonic方法,可以在列表前面的索引 之前刪除所有內容,然後將其添加到後面。
所以,如果我得到了指數3,我要重新排序的列表作爲 [d,E,F,A,B,C]
使用切片操作 例如,
myList = ['a', 'b','c', 'd', 'e', 'f']
myList[3:] + myList[:3]
給
['d', 'e', 'f', 'a', 'b', 'c']
>>> 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']
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']
編輯哈哈所有的答案都是一樣的...
的Python的方式是這sdolan說,我只能添加內嵌方式:
>>> f = lambda l, q: l[q:] + l[:q]
的話,你可以像使用:
>>> f([1,2,3,4,5,6], 3)
[4, 5, 6, 1, 2, 3]
考慮列表是否是最佳選擇。根據你的需要,一個'collections.dequeue'或者ringbuffer可能是一個更高效的數據結構 – 2012-04-17 23:41:06
你真的不想把它做成一個大的列表,因爲它們被實現爲連續的數組。如果你真的需要這樣做,編寫一個函數來使用局部變量作爲存儲寄存器來完成它 - 你仍然會得到獎勵計數,但不會以潛在的悲劇性內存分配模式結束。 – 2012-04-17 23:53:26
好點,幸好我知道這份名單會相當短(少於100個元素),所以我認爲這是沒有問題的。 – themaestro 2012-04-22 18:33:17