Это связано с тем, что в версии с пониманием списка берется копия result
, а затем выполняются операции, а в версии l oop вы продолжаете расширять result
при повторении, что приведет к бесконечному l oop.
Вы можете использовать копию result
для каждого l oop, и таким образом вы получите тот же результат, например:
nums = [1,2,3]
result = [[]]
for num in nums:
for subset in result[:]:
result.extend([subset + [num]])
print(result)
Используя нарезку, result[:]
возвращает копию result
, а не result
самого
Вывод:
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]