본문 바로가기
Python/Python FAQ

Python 리스트 컴프리헨션에서 if/else, if/else in a list comprehension

by 베타코드 2023. 5. 20.
반응형

질문


나는 문자열과 None 값의 혼합물을 포함하는 xs라는 리스트가 있습니다. 어떻게 리스트 내포를 사용하여 각 문자열에 대해 함수를 호출하지만 None 값을 함수에 전달하는 대신 ''로 변환할 수 있을까요?

저는 다음을 시도해 보았습니다:

[f(x) for x in xs if x is not None else '']

하지만 이것은 SyntaxError를 반환합니다. 올바른 구문은 무엇인가요?


조건에 따라 값을 제외하는 리스트 내포를 만들려고 하는 경우 List comprehension with condition을 참조하십시오.

만약 두 개 이상의 조건 결과를 고려해야 하는 경우, Python의 조건 표현식elif를 지원하지 않습니다. 대신, if/else 조건문을 중첩해야 합니다. 자세한 내용은 `elif` in list comprehension conditionals을 참조하십시오.


답변


당신은 완전히 그것을 할 수 있습니다. 그것은 순서 문제일 뿐입니다:

[f(x) if x is not None else '' for x in xs]

일반적으로,

[f(x) if condition else g(x) for x in sequence]

그리고, if 조건만 있는 리스트 컴프리헨션의 경우,

[f(x) for x in sequence if condition]

이는 실제로 다른 언어 구조, 조건 표현식을 사용하며, 이 자체가 컴프리헨션 구문의 일부가 아니며, for…in 뒤의 if는 리스트 컴프리헨션의 일부이며 소스 이터러블에서 요소를 필터링하는 데 사용됩니다.


조건 표현식은 어떤 조건에 따라 두 표현식 값 중 하나를 선택하려는 모든 상황에서 사용할 수 있습니다. 이는 다른 언어에서 존재하는 삼항 연산자 ?:와 동일합니다. 예를 들어:

value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
반응형

댓글