2011-09-05 36 views
6

我正在编写代码来从配置文件中解析瓦片地图。该地图的格式如下:我将如何简洁地转换嵌套列表?

1|2|3|4 
1|2|3|4 
2|3|4|5 

其中数字表示图块。 我然后使这种成一个整数数组:

[[int(tile) for tile in row.split("|")] for row in "1|2|3|4\n1|2|3|4\n2|3|4|5".lstrip("\n").split("\n")] 

此格式为[行] [列]产生一个阵列,但我宁愿它是[柱] [行]如[X] [ y]所以我不需要向后解决它(即[y] [x])。但我想不出任何攻击这个问题的简明方法。 我已经考虑通过Tiled使用xml语法重新编写格式,但对于初学者来说似乎太难了。

在此先感谢您的回复。

+0

的[矩阵转置在Python(http://stackoverflow.com/questions/4937491/matrix-transpose-in-python) – ChillarAnand

回答

26

使用mylist = zip(*mylist)

>>> original = [[1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4, 5]] 
>>> transposed = zip(*original) 
>>> transposed 
    [(1, 1, 2), (2, 2, 3), (3, 3, 4), (4, 4, 5)] 

>>> original[2][3] 
    5 

>>> transposed[3][2] 
    5 

它是如何工作:zip(*original)等于zip(original[0], original[1], original[2])。反过来又等于:zip([1,2,3,4],[1,2,3,4],[2,3,4,5])。

+0

可能重复这就是做这件事的一个令人惊讶的有效途径!谢谢! – zzz

0
def listTranspose(x): 
    """ Interpret list of lists as a matrix and transpose """ 
    tups = zip(*x) 
    return [ list(t) for t in tups ]