Python: преобразование вложенного списка в простой список с координатами - PullRequest
1 голос
/ 19 сентября 2011

В настоящее время я изучаю 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]

это должно дать мне очень простое средство для создания карт.каждый уровень представляет собой плоскую двухмерную поверхность.

    [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]

т.е.(xaxis, yaxis, zaxis, тип)

1 Ответ

3 голосов
/ 19 сентября 2011

Это может быть таким:

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))
...