1

我正在尝试在 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

感谢您提供的任何帮助!

编辑:很抱歉造成混淆,显然我的意思是转置,而不是反转!

4

4 回答 4

4

对于列表的“方形”列表,此实现与您的实现相同:

def makeLRGrid(g):
    return [row[:] for row in g]

可以通过使用 切片整个列表来复制列表[:],并且您可以使用列表推导对每一行执行此操作。

编辑:您似乎实际上是在转置列表列表。这可以通过以下方式完成zip()

def transpose(g):
    return zip(*g)

或者,如果您真的需要列表列表

def transpose(g):
    return map(list, zip(*g))

另请参阅 的文档zip()

于 2012-06-15T14:48:40.627 回答
4

对于数值编程,我强烈推荐NumPy(以及相关的SciPy)。NumPy 实现了非常快速的多维数组。在这里查看可用的数组操作例程。

于 2012-06-15T14:51:21.323 回答
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]])
于 2012-06-15T15:15:01.963 回答
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

输出:</p>

[[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]]
于 2012-06-15T15:01:59.600 回答