繁体   English   中英

如何从python的多维列表中拉出列表?

[英]How to pull a list out of a multi-dimensional list in python?

我知道如何使用索引将元素从简单列表中拉出,但是我不知道如何从另一个列表中拉出一个列表。

这是我需要的地方:我正在pygame中开发蛇游戏。 我主要在运行游戏,但是在让游戏绘制蛇尾时遇到了问题。

这是我的代码的工作方式:我一直在使用pygame.draw作为图形。 “蛇”以带有x和y坐标的框开始。 食物还有另一对x和y坐标(用变量posx和posy表示,以区别于蛇头使用的x和y变量)。 我将游戏的所有先前蛇的坐标保存到列表中,这很好(我通过让游戏打印出它所保存的内容进行检查)。 我这部分的代码是这样的:

path.insert(0,(x,y))

“路径”是我用来跟踪蛇的路径的列表的名称。

我可以四处走动,吃东西没问题(除了我的游戏反应迟钝之外),问题在于我是否尝试实现绘制蛇的故事的代码。

蛇的长度(吃掉了多少“食物”)保存在一个简单的变量中,简称为“长度”。 我写了这段代码来画蛇的故事:

if length>0:
        for i in range(length-1):
            pygame.draw.rect(mainWindow, (255,255,255),(path[i], snakeSize,snakeSize))

原谅最后一行的回绕。

我认为这会从“路径”列表中拉出单独的x,y列表。 但是,如果我吃了一块食物,除了出现在新的随机位置的食物以外,什么都不会发生。 如果我再吃一次,则游戏冻结,并且我收到一条错误消息,内容为:

TypeError: Rect argument is invalid

我猜这不喜欢我试图将x和y坐标拉出“路径”的方式。 我不知道如何从另一个列表中的列表中提取单个元素。

另外,我不明白为什么我第一次吃东西时什么也没发生。 我所知道的是,如果我将公式从“长度1”更改为“长度”,那么我在吃东西后​​立即就冻结了。 它似乎不喜欢长度等于1,我也不知道为什么。

length-1面临的问题是,当您for i in range(length-1)进行操作时,然后当游戏开始时,我猜测length等于1 ,因此length-1等于0且循环根本不执行,因此不会引发任何错误。

因此,由于我们会尽快修复该错误,因此首先将for i in range(length)循环更改for i in range(length)


至于您的错误,根据您的信息, path类似于:

[(1, 2), (4, 1), (6, 4)]

因此,现在假设i=1 通过执行path[i]您得到(4, 1) 因此,这意味着您要传递给rect的最后一个参数

((4, 1), snakeSize, snakeSize)

但是它期望一个4元组的整数。 因此,您有2种方法可以解决此问题:

  1. 只需将其期望的元素逐个传递即可。 就像是:

     (path[i][0], path[i][1], snakeSize, snakeSize) 

    这肯定是一个4元组。

  2. 可能会说“ Python式”的另一种方式是使用*运算符将元组解包 它看起来像这样:

     (*path[i], snakeSize, snakeSize) 

    要了解它的作用,我们来看一个简单的例子:

     >>> a = (4, 6) >>> print( (a, 1, 2) ) ((4, 6), 1, 2) >>> print( (*a, 1, 2) ) (4, 6, 1, 2) 

    同样,这确实是一个4元组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM