2016-10-01 8 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を持っているので、あなただけで、リストを逆にすることができますそれとインプレース:

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

関連する問題