2014-02-09 5 views
2

목록 이해를 사용하여 목록을 작성해야합니다. 이것은 기본적으로해야 할 일입니다.중첩 된 for 루프를 사용하여 목록 이해가있는 목록 작성

pattern = [] 
for c in range(3): 
    for r in range(3): 
     if r == c: 
      pattern.append(a) 
     else: 
      pattern.append(b) 

그러나이 모든 것이 어떻게 든 한 줄로 압축되어야합니다! 필자는 이전에 목록 이해력을 사용한 적이 없으므로 해결책을 설명하십시오.

감사합니다.

편집 : 새 목록이 하위 목록으로 구성되기를 원한다면 그 목록을 이해할 수도 있습니까? 모든 하위 목록 즉, 3 개 요소

pattern = [['a','b','b'],['b','a','b'],['b','b','a']] 

답변

4

를 구성 할 생성 목록에 그래서, 3의 범위를 사용하는 위의 목록 이해의 일반적인 형태는 일반적으로이

[(the task to be done) (how long it has to be done)] 

우리처럼 이해 될 수있다 루프를 에 사용하십시오. 수행해야 할 시간은 부분이며 작업은 부분이 if 일 수 있습니다. 중요한 것은입니다. 작업은 부분이 유효한 값 (심지어 None이 유효한 값)을 반환해야합니다. 따라서 목록 이해에서 Python 구문 (return, Python 2.x print 등)을 사용할 수 없습니다. 당신이 루프 버전의에 표시된대로이 정확히 목록을 만듭니다

['a' if r == c else 'b' for c in range(3) for r in range(3)] 
# ['a', 'b', 'b', 'b', 'a', 'b', 'b', 'b', 'a'] 

이제 첫 번째 질문에 대답하는

.

'a' if r == c else 'b' 

for c in range(3) 실행되고리스트 [0, 1, 2]가 생성되고, 그 다음 모든 반복 for r in range(3)상에서 실행되며리스트 [0, 1, 2] 생성한다 동일

if r == c: 
    'a' 
else: 
    'b' 

우선

같이이된다. r을 반복 할 때마다 위의 if 조건이 실행되고 그 결과 인 if..else이 생성되는 새 목록의 요소로 사용됩니다.

두 번째 질문에 대답하려면 목록 이해력을 잘 사용할 수 있습니다.

위 예제에서 우리는 기본적으로 이해할 수있는 것은 목록을 생성하는 것입니다. 이제, 당신이 우리의 중첩 된 지능형리스트를 보면 첫째, 지금이

[['a' if r == c else 'b' for r in range(3)] for c in range(3)] 
# [['a', 'b', 'b'], ['b', 'a', 'b'], ['b', 'b', 'a']] 

처럼 (우리가 작업에 지능형리스트를 사용하려고 일부를 수행 할) 목록 함축을 시도하고 중첩 할 수 있습니다 , for c in range(3)이 실행되고 ['a' if r == c else 'b' for r in range(3)] 부분이 실행되어 중첩 목록의 개별 행을 생성합니다. 주목해야 할 중요한 점은 중첩 된 목록 이해 내에서 c을 사용할 수 있다는 것입니다.

+0

내 목록을 하위 목록으로 구성하고 싶다고합시다. 범위를 3으로 설정 했으므로 각 하위 목록에 3 개의 요소가 설정되었습니다.그것도 목록 이해력에 넣을 수 있습니까? –

+0

@HayleyvanWaas이 질문을 실제 질문에 포함하고 샘플 입력과 출력으로 설명해주십시오. – thefourtheye

+0

@HayleyvanWaas 업데이트 된 답변을 확인하십시오. – thefourtheye

관련 문제