преобразовать понимание списка в нормальное для l oop in python - PullRequest
0 голосов
/ 27 мая 2020
nums = [1,2,3]
result = [[]]
for num in nums:
    result.extend([subset + [num] for subset in result])
return result

Вот мой код :

nums = [1,2,3]
result = [[]]
for num in nums:
    for subset in result:
        result.extend([subset + [num]])
return result

Я пытался переписать его, используя вложенный для l oop, но он перешел в бесконечность. Мне интересно, почему понимание списка работает нормально, в то время как обычно для l oop не работает. Спасибо.

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Это связано с тем, что в версии с пониманием списка берется копия 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]]
0 голосов
/ 27 мая 2020

это должно делать то же самое, что и ваш код:

if __name__ == "__main__":
    nums = [1, 2, 3]
    result = [[]]
    for num in nums:
        for subset in list(result):
            result += [subset + [num]]
    print(result)

Я предполагаю, что у вас было что-то подобное, но вы использовали

for subset in result:

вместо

for subset in list(result):

Я полагаю, ваш l oop был бесконечным, потому что вы перебирали тот же список, который вы расширяли на каждой итерации. вместо этого вам нужно l oop поверх копии вашего списка ...

0 голосов
/ 27 мая 2020

Вам необходимо создать список, который будет добавлен к result, а затем расширить result этим списком. Это то, что сокращает понимание.

nums = [1,2,3]
result = [[]]
for num in nums:
    subsets = []
    for subset in result:
      subsets.append(subset + [num])
    result.extend(subsets)
...