python - 无法将总和为 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 将一切都视为对象。当您有如下列表时:
my_list = [1,2,3]
这是对存储在内存中my_list
的列表的引用。[1,2,3]
现在,如果您传递my_list
给任何其他函数或在任何其他对象中使用它,例如附加a
in 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))))
通过在函数末尾运行,您可以轻松地看到这一点。这将表明所有条目的内存地址与原始代码相同,但与新代码不同。
推荐阅读
- javascript - 如何使用 JS 将删除按钮添加到列中?
- javascript - 我应该如何强制 TypeScript 理解这个数组中不会有任何空值?
- visual-studio - DotNet 5 ClickOnce 缺少程序集
- java - Java & Excel - 公式更新
- tensorflow - Keras 模型编译设置(查看/更改)
- javascript - Odoo 13 - 将第二个 sum_field 添加到看板列 ProgressBar
- haskell - 如何将函数映射到列表并在满足条件时停止并告诉我它是否停止或到达末尾?
- php - 单击链接时如何将网址发布到变量?
- laravel - 错误:NoSuchMethdError:La case '_InternalLinkedHashMap
' no tiene no tiene captador de instancias 'fecha' - vue.js - Vue 中的 FilePond - 自定义标题