python菜鸟遇到的一个问题,求大神解答,大恩不言谢

今天周几 2020-03-12 03:29:25

在解答这个题时,遇到的问题,注意题目需要输出下标,为了做的麻烦点,我是先获取值,再在列表中找下标,然后发现twoSum()方法中的nums参数改变了,不知原因
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰风漫天 2020-03-12
  • 打赏
  • 举报
回复
因为list是引用类型的,你可以了解一下值类型和引用类型的差别
今天周几 2020-03-12
  • 打赏
  • 举报
回复
引用 1 楼 冰风漫天 的回复:
因为你把不符合的数字1,2给pop了,数组只剩3,4,5所以返回的索引位置是错的,两个方案,1.把不符合的标记为none而不是pop,代码中增加对none的检测并且continue 2.将数字和位置索引组合做个tuple传到calculate里
问题确实得到解决,厉害。但是还是很疑惑,我调用的sum(),为什么cal()方法计算后,会改变sum()的参数值呢
So.ne 2020-03-12
  • 打赏
  • 举报
回复
列表是可变对象,你使用了pop就会改变源来的nums 解决办法:拷贝一个nums

class Solution:

    def TwoSum(self, nums, target):
        nums_copy = nums[:]     # 拷贝nums
        get_list = self.caculate(nums_copy, target)
        r_list = []
        for i in get_list:
            r_list.append(nums.index(i))
        return r_list

    def caculate(self, nums, target):
        for i in nums:
            if i == nums[0]:
                continue
            if nums[0] + i == target:
                return [nums[0], i]
        nums.pop(0)
        return self.caculate(nums, target)

print(Solution().TwoSum([1, 2, 3, 4, 5], 8))
感觉这个题也可以用两个遍历来解决
冰风漫天 2020-03-12
  • 打赏
  • 举报
回复
因为你把不符合的数字1,2给pop了,数组只剩3,4,5所以返回的索引位置是错的,两个方案,1.把不符合的标记为none而不是pop,代码中增加对none的检测并且continue 2.将数字和位置索引组合做个tuple传到calculate里

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧