2015-02-11 21 views
1

我是新來的Python和編程一般,所以我覺得我試圖總結我的周圍是最簡單的事情......頭將項目從前面到後面

比方說,我有12個項目的列表:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

,並匹配在列表中的項目之一的變量:

b = 7 

現在我想在列表中找到那場比賽之前移動每一項比賽進行到列表的末尾以相同的順序如下所示:

a = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6] 

我怎麼會去在Python 3.4.2這樣做呢?

該匹配可以用於任何索引的任何項目,但項目的數量將始終相同(12)。

+1

你試過什麼? – levi 2015-02-11 05:17:01

回答

4

列表的使用切片:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
>>> idx = a.index(7) 
>>> a = a[idx:] + a[:idx] 
>>> a 
[7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6] 

注意,這將拋出一個ValueError如果被搜索的價值是不是在數組中,在這種情況下,你會需要它使用try捕捉 - except

+0

謝謝你。我還沒有真正瞭解.index()。我想這就是爲什麼我找不到解決我的問題的原因。 3小時後,我完成了創建一個小程序,根據音樂所在的鍵(由用戶定義)創建不同的音樂和絃。 :P 只是爲了練習。 – 2015-02-11 09:30:02

0

另一種選擇是同時使用appendpop

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
>>> idx = a.index(7) 
>>> for _ in range(idx): 
...  a.append(a.pop(0)) 
>>> a 
[7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6] 

我不主張在切片方法中使用這種方法,因爲這會非常慢(list s沒有針對前面的pop進行優化)。我只是在這裏提到它來展示另一種我認爲乍一看更容易理解的方法。