簡體   English   中英

在Python中創建2d網格

[英]Creating a 2d Grid in Python

我正在嘗試在Python中創建2d數組或列表或其他內容。 我是該語言的新手,所以我不了解所有的來龍去脈以及不同的類型或庫。

基本上,我有一個正方形的列表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

感謝您提供的任何幫助!

編輯:很抱歉造成混亂,顯然我的意思是轉置,而不是反轉!

此實現與您對列表的“正方形”列表的實現相同:

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()文檔

對於數值編程,我強烈建議NumPy (和相關的SciPy )。 NumPy實現了非常快速的多維數組 這里查看可用的數組操作例程。

要補充克里斯的評論,我真的不能推薦足夠的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]])

我想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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM