Python:将嵌套列表转换为带坐标位置的简单列表

1 投票
1 回答
709 浏览
提问于 2025-04-17 02:35

我现在正在学习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))

撰写回答