programing

목록 이해에서 조건식(if 및 other 식)을 사용하려면 어떻게 해야 합니까?

sourcejob 2022. 10. 4. 23:27
반응형

목록 이해에서 조건식(if 및 other 식)을 사용하려면 어떻게 해야 합니까?

특정 범위의 홀수 목록을 생성하는 목록 이해 기능이 있습니다.

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

그러면 짝수를 제거하는 필터가 생성됩니다.대신 조건부 논리를 사용하여 짝수가 다르게 취급되지만 여전히 목록에 기여하도록 하고 싶습니다.이 코드를 시도했지만 실패합니다.

>>> [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

Python 표현식에서는 다음과 같은 구문을 사용할 수 있습니다.

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) ]

첫 번째 예에서는 필터를 사용하고 있지만 두 번째 예에서는 사용하지 않기 때문에 혼란이 발생합니다.두 번째 예에서는 3진 연산자 식을 사용하여 각 값을 다른 값에 매핑합니다.

필터를 사용하면, 다음의 것이 필요하게 됩니다.

[ 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) ]

목록 이해에도 사용할 수 있습니다.

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

또 하나의 해결책입니다.누군가 마음에 들어 하길 바랍니다.

사용방법 : [False, True][식]

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

#음수값과 양의 값 배열 목록을 압축하는 방법

my_list=[-2,-3,0,1,5]
squred_values=[]
  

squred_values=[-i**2 if i<0 else i**2 for i in my_list]

#또는

for i in my_list:
    if i<0:
        squred_values.append( -i**2)`enter code here`
    else:
        squred_values.append( i**2) 

일람표 이해에 대한 두 가지

ex = [['obi', 'is', '#alive'],['oge', 'is', 'beautiful'],
                ['Ade', 'the', '#comedian', 'de', '#rich'],['Jesus', 'wept']]
res = [j if j.startswith("#") else "_"+j for i in ex for j in i]

언급URL : https://stackoverflow.com/questions/17321138/how-can-i-use-a-conditional-expression-expression-with-if-and-else-in-a-list-c

반응형