如何简洁地转置嵌套列表?
我正在写代码,从一个配置文件中解析一个瓦片地图。这个地图的格式是:
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 语法重新调整格式,但对我这个初学者来说,似乎太难了。
提前感谢任何回复。
2 个回答
0
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是因为我们没有正确理解某些概念。
当我们在网上寻找解决方案时,像StackOverflow这样的社区非常有帮助。在这些地方,很多程序员会分享他们的经验和解决方案,帮助其他人解决类似的问题。
如果你在学习编程,遇到困难,不妨去这些论坛看看,可能会找到你需要的答案。同时,也要记得多尝试,多实践,这样才能更好地理解编程的世界。
def listTranspose( x ):
""" Interpret list of lists as a matrix and transpose """
tups = zip( *x )
return [ list(t) for t in tups ]
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])。