2017-05-01 104 views
0

我試圖定義一個開關功能爲MarblesBoard類的一部分,這將切換左右我的頭兩個數字:蟒蛇列表項開關不能正常工作

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = marbles 
    def switch(self): 
     list(self.input)[1], list(self.input)[0] = list(self.input)[0], list(self.input)[1] 
     print list(self.input)      

board = MarblesBoard((3,6,7,4,1,0,8,2,5)) 
board.switch() 

答案一定是死的簡單,但我不看到它。

回答

1

當你說list(self.input),創建一個新的列表,從self.input分開。毫不奇怪,當你修改列表時,由self.input引用的原始元組保持不變。

相反,(因爲一個是不能修改的元組),你可以讓你登上內容的列表(而不是數組)的所有時間:

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = list(marbles) 
    def switch(self): 
     self.input[1], self.input[0] = self.input[0], self.input[1] 
     print (self.input)      
0

每次這樣做的時候:

list(self.input) 

創建一個新的列表。如果你不把它分配給一個名字,它會被扔掉。

如何:

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = list(marbles) 
    def switch(self): 
     self.input[1], self.input[0] = self.input[0], self.input[1] 
     print self.input 

只在一條上創建一個從用戶的輸入列表,然後在內部與只是工作。

0

每次鍵入list時,您正在創建一個全新的列表。因此,當您有list(self.input)[0] = ...時,您正在創建一個全新的列表,將其第0項設置爲新值,然後將該新列表丟棄,因爲它沒有存儲到任何地方。你需要的東西,如:

self.input[1], self.input[0] = ...