我正在尝试用Python创建一个二维数组或列表。我对这门语言很陌生,所以我不知道所有的细节和不同的类型或库。
基本上,我有一个正方形的列表列表,g,我想要转置它(将行转换成列和列成行)。稍后我将遍历此列表列表和转置列表列表。在转置列表中,列的顺序无关紧要。这是“Python方式”吗?有更快的方法吗?
我喜欢使用列表,因为我很熟悉与我所知的语言中的数组非常相似的语法,但如果在Python中有更好的方法,我想学习它。
def makeLRGrid(g):
n = []
for i in range(len(g)):
temp = []
for j in range(len(g)):
temp.append(g[j][i])
n.append(temp)
return n
感谢您提供任何帮助!
编辑:很抱歉混乱,显然我的意思是转置,而不是反转!
答案 0 :(得分:4)
此实现与“方形”列表列表的实现相同:
def makeLRGrid(g):
return [row[:] for row in g]
可以通过使用[:]
对整个列表进行切片来复制列表,并且可以使用列表推导为每行执行此操作。
修改:您似乎实际上是针对transposing列表列表。这可以通过zip()
:
def transpose(g):
return zip(*g)
或者,如果您确实需要列表列表
def transpose(g):
return map(list, zip(*g))
答案 1 :(得分:3)
对于数值编程,我强烈推荐NumPy(以及相关的SciPy)。 NumPy实现了非常快multi-dimensional arrays。请查看here以获取可用的数组操作例程。
答案 2 :(得分:2)
要添加克里斯的评论,我真的不能推荐numpy。你说它是针对一个项目的,但为了学习一些(简单)语法,你可能会多次使用它。
例如,如果您有列表g:
g = [[1,2,3],[4,5,6],[7,8,9]]
您可以通过以下方式将其转换为数组:
>>> import numpy as np
>>> g_array = np.array(g)
>>> g_array
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
只需访问任何项目:
>>> g_array[0,1]
2
>>> g_array[1,2]
6
并执行你的'反转'(实际转置 - 即第一行成为每一行的第一列):
>>> g_transpose = g_array.transpose() # or = g_array.T from Simon's comment
>>> g_transpose
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
答案 3 :(得分:1)
我猜invert the list of lists
是这样的:
g = [[1,2,3], [4,5,6], [7,8,9]]
result = [p[::-1] for p in g]
print result
输出:
[[3,2,1], [6,5,4], [9,8,7]]
也许我很担心。你能举个例子吗?
评论示例的编辑
result = [list(p) for p in zip(*g)]
print result
输出:
[[1,4,7], [2,5,8], [3,6,9]]