Расширение понимания списка, приводящее к бесконечному циклу в наборах мощности списка - PullRequest
0 голосов
/ 24 июня 2018

Я пытался решить проблему перечисления наборов мощности на Вопрос 78 на Leetcode. Я столкнулся с решением , которое использует списочные выражения, и оно работает. Я попытался расширить его и довести до конца документацию по Python , чтобы убедиться, что я получаю правильный синтаксис, но я, похоже, захожу в бесконечный цикл.

При заданном наборе различных целых чисел возвращаются все возможные подмножества. (набор мощности).

Примечание. Набор решений не должен содержать повторяющихся подмножеств.

Пример:

Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

Код в решении:

    def subsets(nums):
        nums.sort()
        result = [[]]
        for num in nums:
            result += [i + [num] for i in result]
        return result 

Код с моим изменением:

  def subsets(nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    result = [[]]

    for num in nums:
      for list_ in result:
        result.append([num] + list_)
    return result

Я думаю, что на каждой итерации цикла for list_ in result: результат становится больше, и поэтому я бы не стал его заканчивать, но почему это не то же самое с пониманием списка? Чего мне не хватает?

1 Ответ

0 голосов
/ 24 июня 2018

Поскольку сначала разрешается [i + [num] for i in result], а затем, как только это вычисляется, происходит часть result +=, которая отличается от вашей, где вы добавляете 1 к 1. Другое решение добавляет все сразу, так что нет проблем

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