推送python的所有元素列表前面的一个元素

时间:2015-01-10 22:48:51

标签: python arrays list for-loop

我目前正在制作一个简单的蛇式游戏,它通过二维列表(/数组) 我还有一个列表,其中包含蛇的每个部分的坐标。它的主要是工作,除了数组的第一个和第二个元素总是相同的,我不确定原因。

我这样做的方法是向后遍历列表并将前一个元素的值应用到当前元素。

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

以下是代码:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

反过来(删除第一个元素并添加到结尾)的工作原理如下:

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

替代:

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

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