Python从第二个项目开始计算长度为x的数组,并在第一个项目上完成

时间:2012-12-14 01:01:09

标签: python arrays counting skip term

在Python中 我有一个长度为x的数组。

让 array = [0,1,2,3,4,5]

我想从结果上面得到这样的结果: [1,2,3,4,5,0]

所以基本上我不想跳过第一个术语并在数组结束后循环并在最后一个跳过的术语上停止。 我对python很陌生,所以无法用我自己的+谷歌搜索来解决这个问题。

请帮助, 非常感谢!

6 个答案:

答案 0 :(得分:5)

使用slicing and append()

lst = [0, 1, 2, 3, 4, 5]
new_lst = lst[1:]
new_lst.append(lst[0])

您也可以使用new_lst.extend(lst[:1]),但是当头部切片是单个元素时,append(lst[0])可能稍微更高效,因为您不必构建另一个临时列表来包装单个值。 lst[1:] + list[:1]可能是最糟糕的,因为与extend()版本相比,它必须创建另一个丢弃列表对象。

答案 1 :(得分:2)

我会选择切片,但是另一种选择(对于这种简单的使用collections.deque来说通常是矫枉过正的)

小例子:

>>> e =  [0, 1, 2, 3, 4, 5]
>>> from collections import deque
>>> d = deque(e)
>>> d
deque([0, 1, 2, 3, 4, 5])
>>> d.rotate(1)
>>> d
deque([5, 0, 1, 2, 3, 4])
>>> d.rotate(-2)
>>> d
deque([1, 2, 3, 4, 5, 0])

答案 2 :(得分:2)

e =  [0, 1, 2, 3, 4, 5]

e.append(e.pop(0))

为什么人们不立即想到就地转换?

答案 3 :(得分:1)

另一种方式,可能更为一般。想不出一个好名字......

def iterate_from(l, start):
    for i in range(start, len(l)):
        yield l[i]
    for i in range(start):
        yield l[i]

我得到了以下输出:

In [39]: iterate_from(range(7), 3)
Out[39]: <generator object iterate_from at 0x120259b40>

In [40]: list(iterate_from(range(7), 3))
Out[40]: [3, 4, 5, 6, 0, 1, 2]

答案 4 :(得分:0)

使用切片获取您感兴趣的列表部分,然后将它们一起添加:

>>> lst = [0, 1, 2, 3, 4, 5]
>>> lst[1:] + lst[:1]
[1, 2, 3, 4, 5, 0]

lst[1:]将为您提供从第一个索引(包括)到列表末尾的所有内容。

lst[:1]将为您提供从列表开头到第一个索引(独占)的所有内容。 (这相当于[lst[0]]

答案 5 :(得分:0)

当你循环到你的列表时,甚至不需要新的变量

for i in my_list[1:] + my_list[:1]:
    print i,

print
for i in my_list:
    print i,

将返回:

1 2 3 4 5 0
0 1 2 3 4 5

这样您就不会对原始my_list进行任何更改。

另外,请看一下:Explain Python's slice notation