Я думаю, что ваши два подхода не равны.
Второй подход - "расширить set1
после вычисления списка".Таким образом, эквивалент подхода 2 должен выглядеть следующим образом:
set1 = [[]]
num = [1,2,3]
for n in num:
tmp = []
for s in set1:
tmp += [ s + [n] ]
set1 += tmp
print(set1)
Почему вы подходите к 1 зависанию?Это не зависание, это зацикливание навсегда, потому что вы расширяете свой список, проходя его.
for s in set1:
set1 += [ s + [n] ]
Каждый раз, когда вы получаете следующий элемент set1
, ваш set1
становится длиннее.
Это действительно плохая идея, чтобы изменить элемент во время его прохождения.Не делай этого.Создание средней переменной, такой как ваш псевдокод, более безопасно и понятно.