2015-02-11 63 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进行优化)。我只是在这里提到它来展示另一种我认为乍一看更容易理解的方法。