我如何简洁地转置嵌套列表?

时间:2011-09-05 22:19:40

标签: python

我正在编写代码来解析配置文件中的tilemap映射。地图格式为:

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")]

这会以[row] [column]的格式生成一个数组,但我希望它像[x] [y]中的[column] [row]一样,所以我不必向后解决它(即[Y] [X])。 但我想不出任何简洁的方法来攻击这个问题。 我曾考虑通过Tiled使用xml语法重新编写格式,但对初学者来说似乎太难了。

提前感谢您的回复。

2 个答案:

答案 0 :(得分: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])。

答案 1 :(得分:0)

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