목록에 다른 사람이있는 경우
이 질문에는 이미 답변이 있습니다.
- 목록 이해에 있다면? 답변 8 개
나는 목록이있다 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
의와 condition1
와 condition2
두 개의 서로 다른 일을. 이 부분 (a if condition1 else b)
은 람다 식에서 나온 것입니다.
lambda x: a if condition1 else b
다른 하나 condition2
는 또 다른 람다입니다.
lambda x: condition2
전체 지능형리스트의 조합으로 관련 될 수 map
및 filter
:
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과 혼동을 줄이기 위해은 (내 생각 l
과 O
어떤 상황에서도 변수 이름, 심지어 빠른 - 및 - 더러운 예제 코드와 같이 피해야한다).
참고 URL : https://stackoverflow.com/questions/4406389/if-else-in-a-list-comprehension
'Programming' 카테고리의 다른 글
Node.js에서 사용하지 않는 패키지를 제거하거나 제거하는 npm 명령 (0) | 2020.02.25 |
---|---|
ERROR 2002 (HY000) : '/var/run/mysqld/mysqld.sock'소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다 (2). (0) | 2020.02.25 |
응용 프로그램 시작시 응용 프로그램에 루트 뷰 컨트롤러가 있어야합니다 (0) | 2020.02.25 |
UIImage의 크기를 조정하는 가장 간단한 방법은 무엇입니까? (0) | 2020.02.25 |
콘솔의 텍스트 진행률 표시 줄 (0) | 2020.02.25 |