2016-10-01 69 views
-1

我正在測試一個反轉函數。我的代碼如下:Python中的本地和全局變量用法

def deep_reverse(L): 

    new_list = [] 
    for element in L: 
     new_list += [element[::-1]] 
    L = new_list[::-1] 


L = [[1, 2], [3, 4], [5, 6, 7]] 
deep_reverse(L) 
print(L) 

我希望我的輸出L可以是,例如[[7,6,5],[4,3],[2,1]],但它僅適用我的函數內。

我無法在全局變量中更改它。我怎樣才能做到這一點?謝謝

回答

1

L只是一個局部變量,分配一個新的對象不會改變原來的列表;它所要做的就是將該函數中的名稱L指向另一個對象。請參閱Ned Batchelder's excellent explanation about Python names

您可以通過分配給[:]身份切片,而不是取代列表L引用的所有元素

L[:] = new_list[::-1] 

然而,像鏈表這樣的可變序列有list.reverse() method,所以你可以扭轉名單與-place:

L.reverse() 

執行相同的每個子列表:

def deep_reverse(L): 
    """ assumes L is a list of lists whose elements are ints 
    Mutates L such that it reverses its elements and also 
    reverses the order of the int elements in every element of L. 
    It does not return anything. 
    """ 
    for element in L: 
     element.reverse() 
    L.reverse() 
+0

非常感謝。它對你的解釋幫助很大! – Julie