programing tip

한 줄 목록 이해 : if-else 변형

itbloger 2020. 6. 15. 21:54
반응형

한 줄 목록 이해 : if-else 변형


파이썬 목록 이해 구문에 대한 자세한 내용입니다. 주어진 범위의 홀수 목록을 생성하는 목록 이해력이 있습니다.

[x for x in range(1, 10) if x % 2]

이것은 필터를 만듭니다-짝수 ( if x % 2)를 제거하는 소스 목록이 있습니다. 나는 if-then-else와 같은 것을 사용하고 싶습니다. 다음 코드는 실패합니다 :

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "<stdin>", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax

if-else와 같은 파이썬 표현식이 있습니다.

1 if 0 is 0 else 3

목록 이해 내에서 사용하는 방법?


x if y else z각 요소에 대해 반환하는 표현식의 구문입니다. 따라서 다음이 필요합니다.

[ x if x%2 else x*100 for x in range(1, 10) ]

혼동은 첫 번째 예에서는 필터사용 하지만 두 번째 예에서는 필터사용하지 않는다는 사실에서 발생합니다 . 두 번째 예에서는 삼항 연산자 식을 사용하여 각 값을 다른 값 에만 매핑 합니다.

필터를 사용하려면 다음이 필요합니다.

[ EXP for x in seq if COND ]

필터가 없으면 다음이 필요합니다.

[ EXP for x in seq ]

두 번째 예에서 표현은 "복잡한"표현으로, 이에는 if-else.


[x if x % 2 else x * 100 for x in range(1, 10) ]

또 다른 해결책은 누군가가 좋아할 수 있기를 바랍니다.

사용 : [거짓, 참] [식]

>>> map(lambda x: [x*100, x][x % 2 != 0], range(1,10))
[1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>

목록 이해를 통해 그렇게 할 수 있습니다.

A=[[x*100, x][x % 2 != 0] for x in range(1,11)]
print A

나는 이것을 할 수 있었다

>>> [x if x % 2 != 0 else x * 100 for x in range(1,10)]
    [1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>

참고 URL : https://stackoverflow.com/questions/17321138/one-line-list-comprehension-if-else-variants

반응형