Преобразование понимания списка в простой для цикла

#python #for-loop #list-comprehension #permutation

#python #для цикла #понимание списка #перестановка

Вопрос:

У меня есть понимание списка, которое возвращает список всех возможных перестановок, учитывая тот факт, что входные данные содержат все уникальные числа.

 nums = [1,2,3]
ans = [[]]
for x in nums:
    ans = [items   [n] for items in ans for n in nums if (n not in items)]
print(ans)

> [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

  

Я попытался написать для цикла для всего этого следующее:

 nums = [1, 2, 3]
ans = [[]]

for x in nums:
    for items in ans:
        for n in nums:
            if n not in items:
                items.append(n)
print(ans)
  

Однако это не дает мне требуемого результата. Кто-нибудь может мне помочь с этим?

Комментарии:

1. Почему это отклонено?

2. Понятия не имею. Я не понимаю, почему люди делают это, даже не предлагая изменений.

Ответ №1:

 [items   [n] for items in ans for n in nums if (n not in items)]
  

Давайте разберем это, двигаясь справа налево.

 for items in ans:
    for n in nums:
        if n not in items:
  

Затем вы просто создаете список и добавляете в них эти items [n]

 result = []
for items in ans:
    for n in nums:
        if n not in items:
            result.append(items   [n])
  

Теперь все это выполняется изнутри другого цикла for x in nums . Итак, у вас есть:

 nums = [1,2,3]
ans = [[]]

for x in nums:
    result = []
    for items in ans:
        for n in nums:
            if n not in items:
                result.append(items   [n])
    ans = result