[python] if 문을 사용한 목록 이해

2 개의 이터 러블을 비교하고 두 이터 러블에 나타나는 항목을 인쇄하고 싶습니다.

>>> a = ('q', 'r')
>>> b = ('q')


# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
                              ^

그러나이 위치에 잘못된 구문 오류가 발생합니다 ^. 이 람바 함수의 문제점은 무엇입니까?



답변

주문이 잘못되었습니다. 이 if뒤에 있어야합니다 for( if-else삼항 연산자 에 있지 않는 한 ).

[y for y in a if y not in b]

그러나 이것은 작동합니다.

[y if y not in b else other_value for y in a]


답변

당신은 if끝에 넣습니다 .

[y for y in a if y not in b]

목록 이해는 중첩 된 전체 지정 대응과 동일한 순서로 작성되며 기본적으로 위의 명령문은 다음과 같이 변환됩니다.

outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)

귀하의 버전이 대신 이것을 시도했습니다.

outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)

그러나 목록 이해 적어도 하나의 외부 루프로 시작 해야합니다 .


답변

목록 이해 공식 :

[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]

따라서 다음과 같이 할 수 있습니다.

[y for y in a if y not in b]

시연 목적으로 만 : [y가 b에 없으면 y가 그렇지 않으면 a에 y가 거짓]


답변

이것은 람다 함수가 아닙니다. 목록 이해입니다.

순서를 변경하십시오.

[ y for y in a if y not in b]


답변

아래에 설명 된대로 내 상황에 대한 목록 이해에 대한 위에서 언급 한 제안을 조사하고 시도했지만 작동하지 않았습니다. 내가 여기서 뭘 잘못하고 있니?

sent_splt=[['good', 'case,', 'excellent', 'value.'], ['great', 'for', 'the', 'jawbone.'],['tied', 'to', 'charger', 'for', 'conversations', 'lasting', 'more', 'than', '45', 'minutes.major', 'problems!!']]

stop_set = ['the', 'a', 'an', 'i', 'he', 'she', 'they', 'to', 'of', 'it', 'from']

x=[a for a in sent_splt if a not in stop_set]
print(x)

단어를 필터링하지 않습니다.


답변