List.append / extend +运算符和+ =

时间:2017-06-21 03:46:20

标签: python list append extend

我很难在下面了解此代码的行为。在python 3.6中

下面的示例代码是我实际代码的抽象。我这样做是为了更好地描述我的问题。我试图将列表添加到另一个列表中。导致二维列表。为了在以后检查该列表的成员资格。虽然我无法按照我喜欢Eg的方式添加我的列表。

a_list = []
another_list = [7,2,1]

a_list.DONT_KNOW(another_list)
another_list = [7,3,1]

结果:

a_list
[[7,2,1]]
another_list
[7,3,1]

我的问题示例:

class foo:
    def __init__(self):
        self.a_list = []
        self.another_list = [0]
####### Modifying .extend/.append##############
        self.a_list.append(self.another_list) #  .append() | .extend(). | extend([])
###############################################
    def bar(self):
######## Modifying operator########
        self.another_list[0] += 1 #              += | +
###################################
        print('a_list = {} another_list = {} '.format(self.a_list, self.another_list))

def call_bar(f, repeats):
    x = repeats
    while x > 0:
        x -= 1
        foo.bar(f)

f = foo()
call_bar(f,3)

重复5次。修改list.function和increment运算符。输出

        # .append() and +=
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]

        # .extend() and +=
a_list = [0] another_list = [1]
a_list = [0] another_list = [2]
a_list = [0] another_list = [3]

        # .append() and +
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]

        #.extend() and +
a_list = [0] another_list = [1]
a_list = [0] another_list = [2]
a_list = [0] another_list = [3]

        #.extend([]) and +
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]

请注意,在我得到二维数组(我需要)的所有这些例子中。操作 another_list 时, a_list 中的值会发生变化。我如何获得代码来执行此操作?

     #SOME METHOD I DON'T KNOW
a_list = [[0]] another_list = [1]
a_list = [[0]] another_list = [2]
a_list = [[0]] another_list = [3]

2 个答案:

答案 0 :(得分:0)

您必须使用self.a_list.append(self.another_list.copy())创建another_list的快照,然后将其添加到a_list。您的代码实际上会将another_list添加为a_list的元素,因此以后的编辑很自然会更改该对象的内容。

答案 1 :(得分:0)

如果您希望a_list保持[[0]]而不管another)list中的第一个值发生了什么,为什么不在[[0]]中将其初始化为__init__ }?

def __init__(self):
    self.a_list = [[0]]
    self.another_list = [0]
    # End of __init__; nothing else

使用append,您可以添加another_list的引用作为a_list的第一个元素。使用extend,您可以将another_list元素的引用添加到a_list