在Python中从列表访问元组

在Python中从列表访问元组,python,list,pygame,tuples,Python,List,Pygame,Tuples,所以,我还没有弄明白怎么做。我正在为一个游戏制作一个地图解析器,到目前为止,我在“地图”模块中有一个三维列表“mapData”。它存储包含瓷砖和地板ID的元组。所以,当我试图发言时,我会打电话 if maps.mapData[mapIndex][x][y][0] == 0: c.blit(maps.grass, tileRect) 例如,画草,画瓷砖,我称之为 if maps.mapData[mapIndex][x][y][1] == 1: c.blit(maps.tallGrass, til

所以,我还没有弄明白怎么做。我正在为一个游戏制作一个地图解析器,到目前为止,我在“地图”模块中有一个三维列表“mapData”。它存储包含瓷砖和地板ID的元组。所以,当我试图发言时,我会打电话

if maps.mapData[mapIndex][x][y][0] == 0: c.blit(maps.grass, tileRect)
例如,画草,画瓷砖,我称之为

if maps.mapData[mapIndex][x][y][1] == 1: c.blit(maps.tallGrass, tileRect)
画高高的草。不过,我对[0]和[1]感到困惑。他们试图分别引用元组的第一个和第二个元素,但我怀疑我做错了,因为我得到了以下错误:

TypeError: 'int' object is not subscriptable
为了提供帮助,列表“mapData”初始化如下:

mapData = [[[0 for y in range(19)] for x in range(25)] for m in range(mapAmount)]
mapData[mapIndex["spawn"]][5][5] = (0, 1)
“mapIndex”是一个整数字典,用于指定映射是什么

因此,我需要知道如何从元组中获取特定元素,最好不要使用x,y=tuple,因为这需要更多的内存,因为它必须存储变量。这是在渲染循环中。如果这是唯一的办法,那我也没问题。谢谢

作为一个附带的问题,除了在渲染代码中生成一个巨大的if+elif语句外,还有谁更清楚地知道要绘制什么平铺

编辑:我尝试了以下代码:

 floor, tile = maps.mapData[mapIndex][x][y]

 #draw floor
 if floor == 0: c.blit(maps.grass, tileRect)

 #draw tiles
 if tile == 1: c.blit(maps.tallGrass, tileRect)
并得到了错误信息:

TypeError: 'int' object is not iterable

多亏了@LukasGraf,问题才得以解决。并不是列表中的所有变量都初始化为元组,所以我更改了此初始化代码

mapData = [[[0 for y in range(19)] for x in range(25)] for m in range(mapAmount)]
对此

mapData = [[[(0, 0) for y in range(19)] for x in range(25)] for m in range(mapAmount)]

要使列表中的默认值为元组(0,0),而不是0。

关于你的次要问题:字典可以替换大量的elif链。
maps.mapData[mapIndex][x][y]
不像你想象的那样是元组(或任何序列类型),而是整数。要找出原因,请尝试打印它或设置断点并检查它。@Hyperboreus我曾尝试实现它,但我遇到了一个与设置方式有关的错误。一旦这个问题解决了,我会再次尝试设置它。谢谢我同意Hyperboreus的说法,你的mapData项坏了。e、 g.x=[(1,2)]*5;x[1][0]1工作正常问题是,您只为
mapIndex[“spawn”][5][5]
分配一个元组,但所有其他元组都是用上行中的
0
初始化的。