Как исправить ошибку «Nontype» при подходе к функциональному способу решения проблемы двух сумм в python - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь решить проблему кода «Two Sum» в leetcode, но в строке 11 и 12 я сталкиваюсь с ошибкой, в которой говорится, что объект NoneType не повторяется.

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        def allSum(solnSet, nums, target):
            if nums == []:
                return list(map(list, set(map(lambda x: tuple(x), solnSet))))
            elif (int(sum(solnSet)) + int(nums[0])) <= target:
                return allSum(solnSet.append(nums[0]), nums[1:], target)
            else:
                return allSum(solnSet, nums[1:], target)

        soln =[]
        v = allSum(soln, nums, target)
        return v

o = Solution()
print(o.twoSum([1,2,3,4,5], 5))

[1,4]

1 Ответ

0 голосов
/ 18 января 2019

Эта строка является источником проблем:

solnSet.append(nums[0])

Добавление к list ничего не возвращает (поэтому по умолчанию возвращается None). Когда ваша функция выполняет рекурсию для allSum(solnSet.append(nums[0]), nums[1:], target), , вы фактически передаете None в первый аргумент .

Это вызовет исключение 'NoneType' object is not iterable, когда ваш код запускает map(lambda x: tuple(x), solnSet) или sum(solnSet).


Чтобы решить эту проблему, вы можете сделать

allSum(solnSet + [nums[0]], nums[1:], target)

(это создает новый список и не изменяет оригинал)

или

solnSet.append(nums[0])
allSum(solnSet, nums[1:], target)

(но изменяет оригинал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...