>

파이썬 반복 가능한 이해에 대한 일반적인 질문 :

이러한 진술을하는 이유는 무엇인가요?

[s for s in x if s>2]

와이즈 비즈   if 후에 간다 이지만

for

와이즈 비즈   [s if s>2 else None for s in x] 전에 간다 ?

if... else

  • 답변 # 1

    조건식과 이해 필터가 공통적으로 가지고있는 것은키워드 if 를 함께 사용하는 것입니다. .

    a if b else c  조건식입니다. 그것은 b 여부에 관계없이 가치를 보장하는 것입니다.  사실이다. 그것의 사용은 목록 이해에 특정되지 않습니다;와이즈 비즈  값 [s if s > 2 else None for s in x] 가 주어지면 단순히 새 목록에 대한 값을 제공하는 데 사용되는 표현식으로 사용됩니다.   s 에서 .

    x 의 다른 용도  목록 이해 자체의 구문의 일부입니다. 표현의 일부가 아닙니다. iterable의 특정 값을 표현식으로 전달해야하는지 여부를 결정하는 데 사용되는filter를 지정합니다.

    리스트 이해력을 if 의 조합으로 생각하면  그리고 map 그런 다음 표현식은 함수 인수를 filter 로 대체합니다. map 동안  필터는 if 에 대한 호출을 대신합니다. . 즉, 일반 목록 이해를 다시 작성할 수 있습니다

    filter
    
    
    [ <expression> for s in xs if <p>] 의 조합으로

     그리고 map  따라서 :

    filter
    
    

    목록 이해에 대한 논의를 위해 PEP-202를 볼 수 있고 (구식이 될 수도 있고 다른 구문을 문서화하지 않았음에도 불구하고) PEP-308은하는>고려되는 대체 구문에 대해 논의하십시오.

  • 답변 # 2

    list(map(lambda s: <expression>, filter(lambda s: <p>, xs)))  이해를 나열하는 것으로 제한되지 않으며 과제 진술 등에 사용될 수 있습니다. 그것은 목록 이해 안에 특별한 의미가 없습니다.

    와이즈 비즈   if-else 이후의 구문  식은 이해에 포함되는 요소를 선택합니다.  그렇게 할 수 없기 때문에 이해력에 따라 다릅니다.

  • 답변 # 3

    첫 번째 경우, if  작성된리스트의 각 요소가 무엇인지에 대한 표현식의 일부입니다. 두 번째로 요소를 포함할지 여부를 결정하므로 for 가 필요하지 않습니다. ).

  • 답변 # 4

    목록 이해의 가장 일반적인 형태는 다음과 같습니다.
    와이즈 비즈   어디 if-else  선택 사항입니다.
    따라서 다음의 모든 목록 이해가 허용됩니다. ( if , else )
    1. [expression1_of_x for x in iterable if expression2_of_x]  괜찮아. (s, s>2)
    2. expressio2_of_x  (s>2이면 None, nil)
    3. expression1_of_x  (s>2 인 경우 없음, s>10 인 경우)
    자세한 내용은 문서를 참조하십시오.

    expressio2_of_x

관련 자료

  • 이전 c++ - 람다의 캡처 목록에서 =이 포인터를 캡처합니까?
  • 다음 reactjs - Reactrender () 내부에 여러 요소를 반환