我有一些简单的代码来查找两个元素的索引,它们加起来就是一个和。(假设sum存在于列表中)
class Solution(object):
def twoSum(self, nums, target):
compliment = []
for ind, item in enumerate(nums):
print(ind)
if item in compliment:
return [nums.index(target - item), ind]
compliment.append(target - item)
return [0, 0]
if __name__ == "__main__":
result = Solution()
final = result.twoSum([3, 3], 6)
#Why does this not work without removing the self parameter??
#final = Solution.twoSum([3, 3], 6)
print(str(final))
我正在尝试学习如何在Python中最好地实例化一个对象。在我的主要函数中,我想我应该简化它,用一行代替两行。您可以看到我在这个类中调用函数的两次尝试。第二个失败,除非我从函数参数中删除self参数。因为我想传递2个参数而不是3个参数。你知道吗
不管怎样,我很困惑为什么我的两个实现是不同的,为什么一个可以工作而另一个不行,我也不确定我是否需要self。self似乎主要是在您有__init__
并且正在为类定义变量时使用的?既然我不在这里,我还需要它吗?你知道吗
self
参数只对实例方法是必需的(并且只起作用)。实例方法也是默认类型。要在没有实例和self
参数的情况下使用它,请将其修饰为staticmethod
:在Python中,您可以选择将函数装饰为staticmethod或classmethod。对于classmethod,您需要在方法签名中有
cls
。下面是一个很好的讨论来区分两者:What is the difference between @staticmethod and @classmethod?
顺便说一句-对于您的代码,我强烈建议使用集合而不是数组。它将使您的代码更加高效。检查目标值是否已在集合中出现是一个平均时间不变的操作。你知道吗
相关问题 更多 >
编程相关推荐