2016-10-04 3 views
0

Как переписать это с помощью вложенных циклов вместо понимания списка?Как я могу переписать это понимание списка как цикл for?

final= [[]] 
    for i in array_list: 
     final.extend([sublist + [i] for sublist in final]) 


    return final 
+0

Что вы подразумеваете под «типичным для цикла»? –

+0

Вы хотите переписать цикл for как цикл for? – Carcigenicate

+0

второй цикл выполняется с использованием цикла «однострочный» для цикла. Я хотел бы реализовать его как первый цикл for. Я попробовал это, но получаю ошибку памяти – mike991

ответ

2

Если попытаться перебрать окончательный, как вы продлить его, он создает бесконечный цикл , Поскольку каждый раз, когда вы переходите к следующему элементу, вы добавляете еще один элемент, поэтому вы никогда не дойдете до конца списка.

Если вы хотите сделать внутренний цикл как цикл for вместо понимания списка, вам нужно выполнить итерацию по копии окончательного.

final = [[]] 
for i in [1, 2, 3]: 
    for sublist in final[:]: 
     final.extend([sublist + [i]]) 
+0

Его код останавливается. –

+0

@patrickhaugh Да, в настоящее время это происходит, но op хочет использовать вложенные для циклов. –

+0

Спасибо, что работает !! – mike991

0

Ваше решение выглядит очень хорошим for. Однострочное использование itertools возможно, но некрасиво

list(itertools.chain(list(itertools.combinations(arr, i)) for i in range(len(arr) + 1))) 

EDIT:

Красивее:

list(itertools.chain(*[itertools.combinations(arr, i) for i in range(len(arr)+1)])) 
0

Этот код также, похоже, дает те же результаты, что и ваш код.

final = [[]] 
for i in array_list: 
    for sublist in list(final): 
     final.extend([sublist + [i]]) 
return final 

Похоже, ваш код берет элементы последней итерации и объединяет их с элементом текущей итерации (см «пример» ниже). Чтобы сделать это с помощью традиционного цикла цикла, вам необходимо предотвратить переполнение списка, который обновляется во время цикла. Я делаю это, нарушая связь с «конечной» переменной списка. Это можно сделать с помощью функции list() или путем ее отрезания (тогда вам нужно будет заменить ее, как было предложено Морганом).

Пример

Для array_list из [1,2,3] вы получите следующее. Каждая строка (кроме строк) является новым элементом «конечной» переменной списка.

[] 
-------------------------------- 
1   > array_list[0] 
-------------------------------- 
2   > array_list[1] 
1, 2  > array_list[0] + array_list[1] 
-------------------------------- 
3   > array_list[2] 
1, 3  > array_list[0] + array_list[2] 
2, 3  > array_list[1] + array_list[2] 
1, 2, 3  > array_list[0] + array_list[1] + array_list[2] 
Смежные вопросы