Python TypeError:“列表”对象的描述符“追加”不适用于“ int”对象

时间:2020-03-19 03:03:51

标签: python python-3.x

我正在尝试解决python中的LeetCode问题。给定一个整数列表和一个目标,我们必须在列表中找到所有总和等于目标的整数的唯一组合。该列表可以有重复的整数,但是整数的组合(其总和等于目标)在结果中必须唯一。该列表将仅包含正整数https://leetcode.com/problems/combination-sum-ii/

下面是代码:

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        result = List[List[int]]
        c = List[int]
        self.combSum2(0,sorted(candidates),target,result,c)
        return result

    def combSum2(self, i: int, l: List[int], t: int, res: List[List[int]], curr: List[int]):
        if t == 0:
            print(curr)
            res.append(curr)
            return
        if t < 0:
            return
        for idx in range(i,len(l):
            if(idx == i or l[idx] != l[idx-1]):
                curr.append(l[idx])
                self.combSum2(idx+1,l,t-l[idx],res,curr)
                del curr[-1] 

代码确实产生了唯一的组合,但是,当我运行它时,出现此错误: TypeError: descriptor 'append' for 'list' objects doesn't apply to a 'int' object行中的curr.append(l[idx])enter image description here

该如何解决?任何帮助将不胜感激。

编辑:

我尝试了@ user2357112支持Monica的建议并更改了我的代码:

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        result = []
        c = []
        self.combSum2(0,sorted(candidates),target,result,c)
        print("result:")
        print(result)
        return result

    def combSum2(self, i: int, l: List[int], t: int, res: [], curr: []):
        if t == 0:
            print(curr)
            res.append(curr)
            return
        if t < 0:
            return
        for idx in range(i,len(l)):
            if(idx == i or l[idx] != l[idx-1]):
                curr.append(l[idx])
                self.combSum2(idx+1,l,t-l[idx],res,curr)
                del curr[-1]

现在错误消失了,但结果为空:

[1, 1, 6]
[1, 2, 5]
[1, 7]
[2, 6]
result:
[[], [], [], []]

正在创建组合,但未将其附加到结果中。

我不知道错误在哪里。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

您可能正在使用deque,一旦我也遇到同样的问题, 错误的原因是:您在不初始化列表的情况下直接将其附加到deque上。

容易出错的代码

from collections import defaultdict, deque
d = defaultdict(lambda: deque)
a = [1, 2, 3]
for i in range(3):
   d[a[i]].append(i)

无错误代码

from collections import defaultdict, deque
d = defaultdict(lambda: deque([])

查看上一个错误,说它不适用于int对象,实际上不适用于任何东西,直到您在deque中声明了一个列表。

总的来说, 总是像deque([])这样声明。