将 python 列表的所有元素提前一个元素

Pushing all elements of a python list one element earlier

我目前正在制作一个简单的蛇类游戏,它会在二维列表(/array) 中移动 我还有一个列表,其中包含蛇的每个部分的坐标。它 大部分 工作,除了数组的第一个和第二个元素总是相同的,我不确定为什么。

我的做法是向后遍历列表,并将前一个元素的值应用于当前元素。

即。列表中的最后一个元素被设置为倒数第二个的值。然后倒数第二设置为倒数第三等

代码如下:

while i < playerLength:
    x = playerSections[-i-1][0]
    y = playerSections[-i-1][1]
    playerSections[-i] = [x,y]
    i+=1

我知道一些简单的解决方法可以避免这个问题(例如,让循环更快地终止一次迭代)但我想知道为什么这不起作用,所以如果其他人能发现错误。

Martijn Pieters 提出了一个很好的观点。无需移动阵列中蛇的整个长度,您只需移除蛇的最后一部分并将其移动到前面。

您可以简单地删除最后一个元素并在前面添加一个元素,如下所示:

l = [[1,1],[2,1],[2,2]]
l.pop[-1]
l.insert(0, [0,1])

这将删除最后一个元素并在前面插入一个新元素 -- 索引将被调整。

反过来(删除第一个元素并添加到末尾)是这样的:

l.pop[0]
l.append([2,3])

选择:

我刚刚遇到 collections.deque,它为您提供了一个链接的双端列表,其中包含用于在任一侧添加或删除元素的专用函数。只要您不对中间元素执行操作,可能会更快,这应该根据您的情况给出。

https://docs.python.org/2/library/collections.html#collections.deque