2016-11-29 8 views
2

나는 몇 일 전에리스트의 이해력에 관한 질문을했다. Elegant way to delete items in a list which do not has substrings that appear in another list이것은 생성기 표현식입니까?

어쨌든 나는 내 질문에 대한 큰 답을 얻었다.

[p for p in process_list if all(e not in p for e in exclude_list)]

내가 아이디어를 얻을 내 작품에 적용 : 그것은 지능형리스트입니다. 그러나 내가 e not in p for e in exclude_list 부분을 제대로 얻었는지 확실하지 않습니다. 나에게 발전기 표현처럼 보이지만 확실하지 않습니다. 나는 다른 포스트에서이 질문을하는 것이 낫다고 생각한다.

그래서 발전기 표현식입니까?

+4

예 이것은 생성자 표현식입니다. –

+1

예. 이것은 생성자 표현입니다 :'(이것은 생성자 이해입니다)'. '[리스트입니다.]' – inspectorG4dget

+1

'[...]없이 표현식을 직접 전달하면'any()'안에 표현식으로 처리됩니다. –

답변

2

예, all(e not in p for e in exclude_list)은 생성자 표현식을 포함하는 호출입니다. 인수에 전달 된 인수는 괄호를 생략 할 수 있습니다. 여기에 all() function이 호출됩니다. Generator expressions reference documentation에서

:

괄호는 하나 개의 인수를 사용하여 호출에 생략 할 수 있습니다.

all() 기능 (물론 any() 종종 발전기 식 주어진다 컴패니언 기능이 일련의 테스트의 지연 평가를 허용하기 재고 충분히 e not in p 테스트 결과를 결정하기 위해 실행된다.이 경우 all() 반환 초기, 거짓 더 이상의 테스트가 실행되지 않습니다 어떤e not in p 테스트

3

하자 파이썬은 그것이 무엇인지를 알려 :.

>>> p=[] 
>>> exclude_list=[] 
>>> type(e not in p for e in exclude_list) 
<class 'generator'> 
+0

이것은 훌륭한 접근 방법입니다. 하지만, 처음에 혼란스러워하는 것은 exclude_list에 e 대신 p가 아닌 e를 'all()'에 전달하는 것입니다. 그리고이 괄호는 정말로 제네레이터 표현식인지 궁금합니다. Martijn이 대답에서 설명했기 때문에 그러나 지금 나는 그것을 얻는다. – zyc