[python] 목록 이해 조건의`elif`

elif목록 이해에서 사용할 수 있습니까 ?

예 :

l = [1, 2, 3, 4, 5]

for values in l:
    if values==1:
        print 'yes'
    elif values==2:
        print 'no'
    else:
        print 'idle'

elif위 코드와 비슷한 방식으로 목록 이해력에 를 포함 할 수 있습니까 ?

예를 들어 다음과 같은 답변이 있습니다.

['yes', 'no', 'idle', 'idle', 'idle']

지금까지, 나는 단지 사용한 ifelse지능형리스트입니다.



답변

Python의 조건식 은 다음과 같은 사용 사례를 위해 정확히 설계되었습니다.

>>> l = [1, 2, 3, 4, 5]
>>> ['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]
['yes', 'no', 'idle', 'idle', 'idle']

도움이 되었기를 바랍니다 🙂


답변

>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']


답변

당신은 할 수 있습니다.

다음과 같은 구문을 사용할 때 유의하십시오.

['yes' if v == 1 else 'no' for v in l]

if / else 연산자의 삼항 형식을 사용하고 있습니다 (C와 같은 언어에 익숙하다면 다음 ?:구문과 같습니다 (v == 1 ? 'yes' : 'no'):).

if / else 연산자의 삼항 형식에는 ‘elif’가 내장되어 있지 않지만 ‘else’조건에서 시뮬레이션 할 수 있습니다.

['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]

이것은 다음과 같습니다.

for v in l:
    if v == 1 :
        print 'yes'
    else:
        if v == 2:
            print 'no'
        else:
            print 'idle'

그래서 당신이 요청한 것과 같은 직접적인 ‘elif’구조는 없지만 중첩 된 if / else 문으로 시뮬레이션 할 수 있습니다.


답변

아마도 당신은 이것을 원할 것입니다 :

l = [1, 2, 3, 4, 5]

print ([['idle','no','yes'][2*(n==1)+(n==2)] for n in l])


답변

목록 이해력을 사용할 수 있으며 원본에서 다른 목록을 만들 것입니다.

>>> l = [1, 2, 3, 4, 5]
>>> result_map = {1: 'yes', 2: 'no'}
>>> [result_map[x] if x in result_map else 'idle' for x in l]
['yes', 'no', 'idle', 'idle', 'idle']


답변

또 다른 쉬운 방법은 다음과 같이 조건부 목록 이해를 사용하는 것입니다.

l=[1,2,3,4,5]
print [[["no","yes"][v==1],"idle"][v!=1 and v!=2] for v in l]

올바른 답변을 제공합니다.

[ ‘yes’, ‘no’, ‘idle’, ‘idle’, ‘idle’]


답변