Python 为什么循环时不使用整数时会出现整数(类型)错误?
下面我有一个TwoSumsII问题的解决方案,我们基本上有一个排序整数列表和一个目标,我们想要返回所有2个数字的集合,这些数字加起来就是目标:Python 为什么循环时不使用整数时会出现整数(类型)错误?,python,list,dictionary,Python,List,Dictionary,下面我有一个TwoSumsII问题的解决方案,我们基本上有一个排序整数列表和一个目标,我们想要返回所有2个数字的集合,这些数字加起来就是目标: nums = [2,7,11,15] target = 18 comp= dict() for i in range(len(nums)-1): comp = target - nums[i] if nums[i] in comp: print(comp[nums[i],i])
nums = [2,7,11,15]
target = 18
comp= dict()
for i in range(len(nums)-1):
comp = target - nums[i]
if nums[i] in comp:
print(comp[nums[i],i])
else:
print("Target cannot be reached")
出于某种原因,我在comp:
TypeError:类型为“int”的参数不可编辑
我不理解这个错误,因为我看不出这行代码中的整数是什么?-是
nums[I]
那是整数吗
另外,我还有一个关于在这个解决方案中使用dict()的问题。我说的对吗?我们使用的是字典,它提供了一种存储“键”-“值”对的方法?在这种情况下,“键”是列表中每个数字的索引,
值是comp,其中comp=target-nums[i]
?您的标识符comp
最初是一个字典,然后在行中为其分配一个整数
comp = target - nums[i]
正如@Cute Panda指出的,您不能迭代整数
我说的对吗?我们正在使用一本字典,它提供了一个
存储“键”-“值”对的方法
对。字典一般都是这样做的
在这种情况下,“键”是列表中每个数字的索引
这个值是comp,其中comp=target-nums[i]
不!因为你从不在字典里添加任何东西。事实上,在每次迭代中,您都为变量comp分配一个新的整数值,comp是一个字典。所以在for循环中,根本没有字典
了解如何将键值对添加到字典中
此外,我认为如果没有第二个for循环,您的解决方案是行不通的。您可以对整数comp进行二进制搜索(因为数组已排序),也可以使用另一个for循环对其进行线性搜索
nums = [2,7,11,15]
target = 18
comp= dict()
for i in range(len(nums)-1):
comp[i] = target - nums[i]
if comp[i] == nums[i+1]:
print(i,i+1)
我已经找到了一个解决方案,而且似乎很有效 comp是一个整数值,所以你不能在comp上迭代,这就是错误的来源。在线检查,如何在Python中创建字典“因为我看不出这行代码中什么是整数?-是整数吗?是整数吗?有两件事你可以考虑:nums[I]
,和comp
。您是否尝试检查了值是什么?你试过推理吗?例如,当您对y中的x执行时,您认为通常认为x中的x
和y
中的哪一个是合适的?因此,如果是int
,您认为哪件事会成为问题?“我说的[关于Python中dict
是什么的基础知识…]正确吗?”堆栈溢出并不是为了取代现有的教程和文档。如果你还不明白这类事情,你应该从一开始就寻找并遵循一个教程。仔细考虑一下有问题的代码行。测试的目的是什么?因此,您应该检查什么值,应该在哪里检查它?提示:程序中应该添加到目标中的两个值是什么?他们都应该从什么地方来?你已经知道其中一个是从那里来的吗?(提示,是的,您确实这样做了,因为您明确地从那里获得了它。)