Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python的所有元素提前列出一个元素_Python_Arrays_List_For Loop - Fatal编程技术网

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

将python的所有元素提前列出一个元素,python,arrays,list,for-loop,Python,Arrays,List,For Loop,我目前正在制作一个简单的蛇式游戏,可以在二维列表(/array)中移动 我还有一个列表,上面有蛇的每一部分的坐标。除了数组的第一个和第二个元素总是一样的,我不知道为什么,它基本上是工作的 我这样做的方式是通过向后迭代列表,并从上一个元素中获取值以应用于当前元素 即,列表中的最后一个元素被设置为倒数第二个元素的值。然后将第二个倒数第三个倒数第三个倒数第三个倒数第二个倒数第三个倒数第三个倒数第三个倒数第二个倒数第三个倒数第三个倒数第 代码如下: while i < playerLength:

我目前正在制作一个简单的蛇式游戏,可以在二维列表(/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])
这将删除最后一个元素并在前面插入一个新元素——索引将被调整

另一种方法(删除第一个元素并添加到末尾)的工作原理如下:

l = [[1,1],[2,1],[2,2]]
l.pop[-1]
l.insert(0, [0,1])
l.pop[0]
l.append([2,3])
备选方案: 我刚刚看到,它提供了一个链接的双端列表,其中有专门的函数来添加或删除两边的元素。只要您不在中间元素上执行操作,可能会更快,这应该在您的案例中给出


Python索引是基于从第一个(包含)到最后一个(独占)的方式工作的,即当您选择[1:4]时,它会给您[1]a[2]和[3]……如果这样做是合理的,为什么不删除最后一个元素呢?您始终可以在开始时插入新元素……这将更简单!我已经使用了太多的Java,我忘记了列表在其他语言中是多么灵活,因此这将减少最初的预期代码。我发誓,曾经编写snake(用于学习目的)的任何一个人都遇到过这个问题,并且总是得到martjin的答案。如果效率是一个问题(并且代码复杂度稍微高一点也可以),您可以使用
array
,将player length作为变量,并批量删除元素(类似于垃圾收集)。也就是说,我同意
deque
是一个很好的折衷方案:它避免了O(n)delete,但保持了代码的简单性。