2016-10-04 3 views
0

목록 내포가 아니라 중첩 된 for 루프를 사용하여 이것을 어떻게 다시 쓸 수 있습니까?이 목록 이해력을 for 루프로 다시 작성하려면 어떻게해야합니까?

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


    return final 
+0

"typical for loop"는 무엇을 의미합니까? –

+0

for 루프를 for 루프로 다시 작성 하시겠습니까? – Carcigenicate

+0

두 번째 루프는 "단일 라인"for 루프를 사용하여 수행됩니다. 첫 번째 for 루프처럼 구현하고 싶습니다. 나는 그것을 시도했지만 메모리 오류가 발생한다. – mike991

답변

2

당신은 당신이 그것을 확장 등의 최종 반복하려고하면, 그것은 무한 루프를 생성 . 다음 요소로 갈 때마다 다른 요소를 추가하므로 목록의 끝에 도달하지 않습니다.

내부 루프를 목록 이해 대신 for 루프로 사용하려면 최종 복사본을 반복해야합니다.

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

그의 코드가 중지됩니다. –

+0

@patrickhaugh 예, 현재 작동하지만 op는 중첩 된 for 루프를 사용하려고합니다. –

+0

고마워요 !! – mike991

0

귀하의 솔루션은 매우 좋은 것 같습니다 for 루프. itertools를 사용하는 한 줄은 가능하지만, 추한

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

편집 :

명 Prettier :

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 

코드가 마지막 반복 요소를 가져 와서 현재 반복 요소 (아래 '예제'참조)와 결합한 것처럼 보입니다. 전통적인 for 루프로이를 수행하려면 루핑되는 목록이 루핑되는 동안 업데이트되지 않도록해야합니다. 나는 '최종'목록 변수로 링크를 끊음으로써 이것을한다. 이 작업은 list() 함수를 사용하거나 슬라이싱하여 수행 할 수 있습니다. 그러면 Morgan이 제안한 바로 대체해야합니다. [1,2,3]의 array_list 예를 들어

당신은 다음을 얻는다. 각 행 (행 제외)은 '최종'목록 변수의 새로운 요소입니다.

[] 
-------------------------------- 
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] 
관련 문제