我正在编写代码来解析配置文件中的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语法重新编写格式,但对初学者来说似乎太难了。
提前感谢您的回复。
答案 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 ]