Programming

목록에 다른 사람이있는 경우

procodes 2020. 2. 25. 22:58
반응형

목록에 다른 사람이있는 경우


이 질문에는 이미 답변이 있습니다.

나는 목록이있다 l:

l = [22, 13, 45, 50, 98, 69, 43, 44, 1]

45를 초과하는 숫자의 경우 1을 추가하고 싶습니다. 그보다 적은 수의 경우 5.

나는 시도했다

[x+1 for x in l if x >= 45 else x+5]

그러나 구문 오류가 발생합니다. 어떻게 달성 할 수 if- else지능형리스트에서이 같은를?


>>> l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
>>> [x+1 if x >= 45 else x+5 for x in l]
[27, 18, 46, 51, 99, 70, 48, 49, 6]

마 - 어떤 경우에 <condition>, 다른 다른 DO-것을.


이 오류가 발생하는 이유는 목록 이해가 수행되는 방법과 관련이 있습니다.

다음을 명심하십시오.

[ expression for item in list if conditional ]

다음과 같습니다.

for item in list:
    if conditional:
        expression

expression형식이 약간 다른 경우 (문장과 동사 순서를 문장으로 전환하는 것을 고려하십시오).

따라서 코드 [x+1 for x in l if x >= 45]는 다음을 수행합니다.

for x in l:
    if x >= 45:
        x+1

그러나이 코드 [x+1 if x >= 45 else x+5 for x in l]는 (을 재정렬 한 후 expression)이 작업을 수행합니다.

for x in l:
    if x>=45: x+1
    else: x+5

[x+1 if x >= 45 else x+5 for x in l]

그리고 보상을 위해 여기에 의견이 있습니다.이 오류를 처음했을 때 이것을 기억하기 위해 썼습니다.

파이썬의 조건식은 다음 a if C else b과 같이 사용할 수 없으며 다음과 같이 사용할 수 없습니다.

[a for i in items if C else b]

올바른 형태는 다음과 같습니다.

[a if C else b for i in items]

유효한 양식이 있지만

[a for i in items if C]

그러나 이는 필터링 방법과 동일하지 C않지만 결합 할 수 있습니다.

[a if tC else b for i in items if fC]

리스트 이해의 시작 부분에 표현식을 넣어야하며 끝에 if 문이 요소를 필터링합니다!

[x+1 if x >= 45 else x+5 for x in l]

목록 이해 내에서 대괄호 안에 조건식을 넣을 수도 있습니다.

    l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
    print [[x+5,x+1][x >= 45] for x in l]

[false, true] [조건]은 구문입니다


에서와 마찬가지로 [a if condition1 else b for i in list1 if condition2]두, if의와 condition1condition2두 개의 서로 다른 일을. 이 부분 (a if condition1 else b)은 람다 식에서 나온 것입니다.

lambda x: a if condition1 else b

다른 하나 condition2는 또 다른 람다입니다.

lambda x: condition2

전체 지능형리스트의 조합으로 관련 될 수 mapfilter:

map(lambda x: a if condition1 else b, filter(lambda x: condition2, list1))

방금 비슷한 문제가 있었고이 질문과 대답이 실제로 유용하다는 것을 알았습니다. 여기 내가 혼란 스러웠던 부분이 있습니다. 아무도 영어로 간단히 언급하지 않았기 때문에 명시 적으로 작성하고 있습니다.

반복이 끝납니다.

일반적으로 루프는

for this many times:
    if conditional: 
        do this thing
    else:
        do something else  

모든 사람은 첫 번째 답변과 마찬가지로 간단히 목록 이해력을 언급합니다.

[ expression for item in list if conditional ] 

하지만 실제로는이 경우가 아닙니다. (나는 그렇게하려고 노력했다)

이 경우에는 다음과 같습니다.

[ expression if conditional else other thing for this many times ] 

조건을 다음으로 이동할 수 있습니다.

v = [22, 13, 45, 50, 98, 69, 43, 44, 1]
[ (x+1 if x >=45 else x+5)  for x in v ]

그러나 조금 추해 보이기 시작하여 정상적인 루프를 사용하는 것이 좋습니다. 내가 사용하는 것을 참고 v대신 l목록 변수가 숫자 1과 혼동을 줄이기 위해은 (내 생각 lO어떤 상황에서도 변수 이름, 심지어 빠른 - 및 - 더러운 예제 코드와 같이 피해야한다).

참고 URL : https://stackoverflow.com/questions/4406389/if-else-in-a-list-comprehension



반응형