首页 > 解决方案 > 无法将总和为 0 的 3 个数字放入列表中

问题描述

我的名单myList没有得到更新。

我在一个函数中定义它,我在那个函数中使用它

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        myList = []
        a = []
        for i in range(len(nums)):
           # print("---i",nums[i])
        #    print(a[0])
            for j in range(i+1,len(nums)):
             #   print("----j",nums[j])
                for k in range(i+2,len(nums)):
                #    print("-----k",nums[k])
                    if nums[i]+nums[j]+nums[k] == 0:
                        print("m into it now for i",nums[i],"j",nums[j],"k",nums[k])
                        print("oooo",myList)
                        a.append(nums[i])
                        a.append(nums[j])
                        a.append(nums[k])
                  #      print(myList)
                        myList.append(a)
                        print("....",myList)
                        print("---",a)
                        a.clear()
        print(myList)

获取输出为:

[[], [], [], []]

标签: python

解决方案


Python 将一切都视为对象。当您有如下列表时:

my_list = [1,2,3]

这是对存储在内存中my_list的列表的引用。[1,2,3]

现在,如果您传递my_list给任何其他函数或在任何其他对象中使用它,例如附加ain myList,所以这里基本上 python 使用 this 作为对原始列表的引用。现在myList已经存储了a它里面的引用。这就是为什么当你清除 的内容时a,它也会影响 的内容myList

您不必清除 list 的内容a。每次for像这样循环重新初始化它。

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        myList = []
        for i in range(len(nums)):
           # print("---i",nums[i])
           # print(a[0])
            for j in range(i+1,len(nums)):
             # print("----j",nums[j])
                for k in range(i+2,len(nums)):
                    # print("-----k",nums[k])
                    if nums[i]+nums[j]+nums[k] == 0:
                        print("m into it now for i",nums[i],"j",nums[j],"k",nums[k])
                        print("oooo",myList)
                        a = []
                        a.append(nums[i])
                        a.append(nums[j])
                        a.append(nums[k])
                        # print(myList)
                        myList.append(a)
                        print("....",myList)
                        print("---",a)
        print(myList)

更新:正如 Artog 在评论中提到的

print(list(map(hex,map(id, myList))))通过在函数末尾运行,您可以轻松地看到这一点。这将表明所有条目的内存地址与原始代码相同,但与新代码不同。


推荐阅读