python列表项目切换不起作用

时间:2017-05-01 01:55:02

标签: python

我正在尝试将一个开关函数定义为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()

答案一定很简单,但我没有看到它。

3 个答案:

答案 0 :(得分: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)                    

答案 1 :(得分: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

仅在一个点上从用户的输入创建一个列表,然后在内部使用该列表。

答案 2 :(得分:0)

每次您输入list,您都会创建一个全新的列表。因此,当您list(self.input)[0] = ...创建一个全新的列表时,将其第0个项目设置为新值,然后将该新列表丢弃,因为它不会存储在任何位置。你需要这样的东西:

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