将列表中的项目从前移到后

Move items in list from front to the back

我是 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)。

使用列表切片:

>>> 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 块捕获它

另一种选择是同时使用 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]

我不提倡在切片方法上使用它,因为这会非常慢(lists 未针对从正面 poping 进行优化)。我只是在这里提到它来展示另一种我认为乍一看更容易理解的方法。