Расширение понимания списка, приводящее к бесконечному циклу в наборах мощности списка

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

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

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

Пример:

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 ответ

Решение

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

Другие вопросы по тегам