Python 无法将总和为0的3个数字放入列表中
名为Python 无法将总和为0的3个数字放入列表中,python,Python,名为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])
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
传递给任何其他函数,或者在任何其他对象中使用它,就像您在myList
中附加了a
,那么这里基本上python使用它作为原始列表的参考。现在,myList
已将a
的引用存储在其中。
这就是为什么当您清除a
的内容时,它也会影响myList
的内容
您不必清除列表a
的内容。只要像这样在循环中每次重新初始化它
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)))
可以很容易地看到这一点。这将表明,对于原始代码的所有条目,内存地址都是相同的,但与新代码不同。Python将所有内容都视为对象。
当您有如下列表时:
my_list = [1,2,3]
这里的my_list
是对存储在内存中的列表[1,2,3]
的引用
现在,如果您将my_list
传递给任何其他函数,或者在任何其他对象中使用它,就像您在myList
中附加了a
,那么这里基本上python使用它作为原始列表的参考。现在,myList
已将a
的引用存储在其中。
这就是为什么当您清除a
的内容时,它也会影响myList
的内容
您不必清除列表a
的内容。只要像这样在循环中每次重新初始化它
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)))
可以很容易地看到这一点。这将显示所有具有原始代码的条目的内存地址相同,但与新条目不同。您可以通过在函数末尾运行print(list(map(hex,map(id,myList)))
来轻松看到这一点。这将显示所有具有原始代码的条目的内存地址相同,但与新的不同。您可以通过在函数末尾运行print(list(map(hex,map(id,myList)))
来轻松看到这一点。这将显示内存地址对于所有具有原始代码的条目都是相同的,但与新条目不同,与您的问题无关,但如果您想迭代所有组合,它应该是范围(j+1,len(nums))中的k吗?
与您的问题无关,但应该是范围(j+1,len(nums))中的k吗
如果要迭代所有组合?