2016-01-22 22 views
0

我實際上正在嘗試創建一個函數來在90°左右轉動一個雙維列表(它必須適用於n行和n列)。 我找到了一種方法來做兩個循環「for」,但它告訴我,當我嘗試調用該函數時,生成器不是可自定義的。 當我一個月前開始使用Python時,我不知道發生器是什麼,並且我沒有清楚我在網上發現的東西。順便說一下,由於語言的原因,我有麻煩研究隱藏在其他帖子中的答案。面對一個錯誤「發電機不可自付」

下面的代碼,以向右轉:

def Rotationversdroite(m,liste): 
    i = 0 
    x, y = 0, 0 
    z = m - 1 
    listebis = ([0]*(m) for i in range(m)) 
    for x in range(m): 
     for y in range(m): 
      listebis[y][z-x] = liste[x][y] 
    return listebis 
+0

當你想讓它成爲一個列表時,你的'listebis'是一個生成器。將括號替換爲parantheses。 – L3viathan

回答

1

您正在使用生成器表達式分配發生器到listebis變量。

與列表理解

listebis = [[0] * m for i in range(m)] 
1
簡而言之發電機

在迭代(通常是循環)用於替換

listebis = ([0]*(m) for i in range(m)) 

非常相似列表或元組,但不存儲迭代每個值一次可以節省內存空間。

當你寫

listebis = ([0]*(m) for i in range(m)) 

它實際上並沒有執行循環和每一個值一次存儲,而是設置了一個過程,可以基於指定的循環值。

要運行的循環和存儲在列表中的結果改變行之一:

listebis = list([0]*(m) for i in range(m)) 
listebis = [[0]*(m) for i in range(m)]  #square brackets instead of round 

在一個側面說明,你不必初始化I,X,或y,因爲它們會在它們各自的循環開始時被初始化。

相關問題