Python:将嵌套列表转换为带坐标位置的简单列表
我现在正在学习Python和Panda3D。
我有一个嵌套列表,需要把它转换成坐标列表。
我的输入是:
[['g,g', 'g,g'], ['d,d', 'd,d,d', 'd,d], ['s,s', 's,s']]
我需要的输出是另一个列表:
[(0,0,0,'s'),(0,1,0,'s'),(1,0,0,'s'),(1,1,0,'s'),(0,0,1,'d'),(0,1,1,'d'),(1,0,1,'d'),(1,1,1,'d'),(1,2,1,'d'),(2,0,1,'d'),(2,1,1,'d'),(0,0,2,'g'),(0,1,2,'g'),(1,0,2,'g'),(1,1,2,'g')]
这个简单的列表转换让我感到很困惑。o.0
补充说明:更多信息:
在输入列表中,最后一个嵌套列表代表基础层。
我的想法是把我写在文件里的字符串转换成坐标点。文件的内容是:
[LVL02]
g,g
g,g
[/LVL02]
[LVL01]
d,d
d,d,d
d,d
[/LVL01]
[LVL00]
s,s
s,s
[/LVL00]
这应该能让我制作一个非常基础的地图生成器。每一层都是一个平面的2D表面。
[LVL02]
g,g (0,0,2,'g'),(0,1,2,'g')
g,g (1,0,2,'g'),(1,1,2,'g')
[/LVL02]
[LVL01]
d,d (0,0,1,'d'),(0,1,1,'d')
d,d,d (1,0,1,'d'),(1,1,1,'d'),(1,2,1,'d')
d,d (2,0,1,'d'),(2,1,1,'d')
[/LVL01]
[LVL00]
s,s (0,0,0,'s'), 0,1,0,'s')
s,s (1,0,0,'s'),(1,1,0,'s')
[/LVL00]
也就是说,(x轴, y轴, z轴, 类型)
1 个回答
3
这可能是这个:
l = [['g,g', 'g,g'], ['d,d', 'd,d,d', 'd,d'], ['s,s', 's,s']]
output = [ (x, y, z, v) for z, l1 in enumerate(l[::-1]) for y, l2 in enumerate(l1) for x, v in enumerate(l2.split(',')) ]
... 但是按照现在的写法,规则到底是什么并不清楚。在嵌套循环中:
output = []
for z,l1 in enumerate(l[::-1]):
for y, l2 in enumerate(l1):
for x, v in enumerate(l2.split(',')):
output.append((x, y, z, v))