Python 为什么循环时不使用整数时会出现整数(类型)错误?

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])

下面我有一个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])

    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
是什么的基础知识…]正确吗?”堆栈溢出并不是为了取代现有的教程和文档。如果你还不明白这类事情,你应该从一开始就寻找并遵循一个教程。仔细考虑一下有问题的代码行。测试的目的是什么?因此,您应该检查什么值,应该在哪里检查它?提示:程序中应该添加到
目标中的两个值是什么?他们都应该从什么地方来?你已经知道其中一个是从那里来的吗?(提示,是的,您确实这样做了,因为您明确地从那里获得了它。)