목록 이해에 있어서 if/inclused
어떻게 모든 할 수 요?None
문자열이 s를 호출하고 합니다.f
[f(x) for x in xs if x is not None else '']
당신은 할 수 있어요.단지 주문에 관한 문제일 뿐입니다.
[f(x) if x is not None else '' for x in xs]
일반적으로는
[f(x) if condition else g(x) for x in sequence]
목록 에서는 ,, 스, 스, 리, 리, comp, comp, comp, comp, and, and, and.if
조건만,
[f(x) for x in sequence if condition]
이것은 실제로 다른 언어 구조인 조건식을 사용하는 것에 주의해 주세요.조건식 자체는 이해 구문의 일부가 아니지만if
그 for…in
는 목록 통합의 일부로 소스 반복 가능에서 요소를 필터링하기 위해 사용됩니다.
조건식은 어떤 조건에 따라 두 식 값 중 하나를 선택하는 모든 상황에서 사용할 수 있습니다.이는 다른 언어에 존재하는 3진 연산자와 동일합니다.예를 들어 다음과 같습니다.
value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
구체적인 문제는 앞의 답변에서 이미 해결되었으므로 리스트의 포괄 안에서 조건을 사용하는 일반적인 생각에 대해 설명하겠습니다.
다음으로 조건의 기입을 리스트의 이해 내에 실시하는 예를 나타냅니다.
X = [1.5, 2.3, 4.4, 5.4, 'n', 1.5, 5.1, 'a'] # Original list
# Extract non-strings from X to new list
X_non_str = [el for el in X if not isinstance(el, str)] # When using only 'if', put 'for' in the beginning
# Change all strings in X to 'b', preserve everything else as is
X_str_changed = ['b' if isinstance(el, str) else el for el in X] # When using 'if' and 'else', put 'for' in the end
첫 에서는 ''의 이해'에 주의해 주십시오.X_non_str
순서는 다음과 같습니다.
표현 위해서 아이템 에 반복할 수 있다 한다면 조건.
도 '''에 대해서''''X_str_changed
을 사용하다
식1 한다면 조건. 또 다른 식 2 위해서 아이템 에 반복할 수 있다
expression1이 if보다 앞에 있어야 하고 expression2가 다른 뒤에 있어야 한다는 것을 항상 기억하는 것은 어렵습니다.내 머리는 둘 다 전이나 후나 되고 싶어.
'비가 오면 안에 있고, 아니면 밖에 나가고 싶다'는 등 일반 언어와 비슷하기 때문에 그렇게 설계되어 있는 것 같습니다.
쉬운 영어에서는 위에서 언급한 두 가지 유형의 목록 이해가 다음과 같이 표현될 수 있다.
★★★만 if
:
추출_애플 위해서 사과 에 apple_box 한다면 apple_is_clossible
★★★★★★★★★★★★★★★★와 함께if/else
마크_애플 한다면 apple_is_clossible 또 다른 마크가 붙어 있지 않다 위해서 사과 에 apple_box
이 질문을 사용하여 몇 가지 개념을 복습해 보겠습니다.다른 경우를 추론할 수 있도록 기본을 먼저 보는 것이 좋다고 생각합니다.
다른 답변은 질문에 대한 구체적인 답변을 제공합니다.제가 먼저 일반적인 문맥을 설명하고 그 다음에 질문에 답하겠습니다.
기초
if/else
목록 포괄에 있는 문장은 다음 두 가지를 포함합니다.
- 일람표
- 조건식(삼진 연산자)
1. 이해의 일람
목록을 만드는 간결한 방법을 제공합니다.
이 구조는 "표현식 뒤에 for 절이 이어지는 괄호, 그리고 0 이상의 for 또는 if 절"로 구성됩니다.
케이스 1
여기엔 아무 조건도 없다.반복 가능한 각 항목이 에 추가됩니다.new_list
.
new_list = [expression for item in iterable]
new_list = [x for x in range(1, 10)]
> [1, 2, 3, 4, 5, 6, 7, 8, 9]
케이스 2
여기 한 가지 조건이 있습니다.
예 1
상태: 짝수만 추가됩니다.new_list
.
new_list = [expression for item in iterable if condition == True]
new_list = [x for x in range(1, 10) if x % 2 == 0]
> [2, 4, 6, 8]
예 2
상태: 3의 배수인 짝수만 추가됩니다.new_list
.
new_list = [expression for item in iterable if condition == True]
new_list = [x for x in range(1, 10) if x % 2 == 0 if x % 3 == 0]
> [6]
왜 의 조건이 거죠?if
new_list
앞의 표현은 다음과 같이 쓸 수 있습니다.
new_list = [x for x in range(1, 10) if x % 2 and x % 3 == 0]
> [6]
만만 1는 1개만 합니다.if
★★★★★★ 。
이것은 다음과 같습니다.
new_list = []
for x in range(1, 10):
if x % 2 == 0 and x % 3 == 0:
new_list.append(x)
> [6]
예 3
로 삼으면 된다, 하다, 하다, 하다, 하다, 이렇게 쓸 요.or
.
상태: 짝수 또는 3의 배수 값이 추가됩니다.new_list
.
new_list = [x for x in range(1, 10) if x % 2 == 0 or x % 3 == 0]
> [2, 3, 4, 6, 8, 9]
케이스 3
여러 조건:
여기서는 조건식(삼진 연산자)의 도움이 필요합니다.
2. 조건식
조건식이 뭐죠?이름이 말하는 것: 어떤 조건을 가진 Python 표현입니다.
<Exp1> if condition else <Exp2>
번째는 ★★★★condition
만약의 condition
True
, , , 「 」<Exp1>
평가되어 반환됩니다. ifcondition
False
, , , 「 」<Exp2>
평가되어 반환됩니다.
여러 조건을 가진 조건식:
<Exp1> if condition else <Exp2> if condition else <Exp3>...
Real Python의 예:
age = 12
s = 'minor' if age < 21 else 'adult'
> minor
「」의 값s
is 로 있다age
discloss.discloss 。
3. 조건을 포함한 리스트 정리
리스트의 종합과 조건을 이렇게 정리했습니다.
new_list = [<Conditional Expression> for <item> in <iterable>]
new_list = [<Exp1> if condition else <Exp2> if condition else <Exp3> for <item> in <iterable>]
상태: 짝수가 다음과 같이 추가됩니다.'even'
, 그럼 3번, 3번은 3번으로 'number three'
그리고 나머지는 로 추가될 것이다.'odd'
.
new_list = ['even' if x % 2 == 0 else 'number three' if x == 3 else 'odd'
for x in range(1, 10)]
> ['odd', 'even', 'number three', 'even', 'odd', 'even', 'odd', 'even', 'odd']
질문에 대한 답변
[f(x) for x in xs if x is not None else '']
목록.for x in xs
표현식의 끝에 있어야 합니다.
올바른 방법:
[f(x) if x is not None else '' for x in xs]
추가 정보:
편도:
def change(x):
if x is None:
return f(x)
else:
return ''
result = [change(x) for x in xs]
다음과 같은 이점이 있습니다.
result = map(change, xs)
또는 람다 인라인을 사용할 수 있습니다.
다음으로 다른 예를 제시하겠습니다.
>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!
라는 사실을 이용하다if i
False
★★★★★★에0
★★★★★★★★★★★★★ ★★★★True
에 되는 기타 range()
따라서 목록 이해도는 다음과 같이 평가됩니다.
>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']
.if
else
내 은 거의.그러나 목록 이해 내의 삼원 문장은 거의 읽기 어렵다.
함수를 사용하면 가독성이 향상되지만 매핑이 입력인 워크플로우에서는 이러한 솔루션을 확장하거나 조정하기가 어렵습니다.사전은 다음과 같은 문제를 완화할 수 있습니다.
xs = [None, 'This', 'is', 'a', 'filler', 'test', 'string', None]
d = {None: '', 'filler': 'manipulated'}
res = [d.get(x, x) for x in xs]
print(res)
['', 'This', 'is', 'a', 'manipulated', 'test', 'string', '']
[f(x) if x != None else '' for x in xs]
목록 이해 구문:
[item if condition else item for item in items]
[f(item) if condition else value for item in items]
[item if condition for item in items]
[value if condition else value1 if condition1 else value2]
그것은 목록 이해의 수행 방식과 관련이 있다.
다음의 점에 주의해 주세요.
[ 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
반복 가능한 항목에서 목록 만들기
질문에 대한 구체적인 답변을 하기보다는 가능한 모든 양식을 먼저 일반화하는 것이 최선인 것 같습니다.그렇지 않으면 독자는 답이 어떻게 결정되었는지 알 수 없습니다.여기 내가 머리가 아프기 전에 생각해 낸 몇 가지 일반화된 서식이 있다. 마지막 서식에 다른 마지막 서식을 사용할 수 있는지 결정하려고 한다.
[expression1(item) for item in iterable]
[expression1(item) if conditional1 for item in iterable]
[expression1(item) if conditional1 else expression2(item) for item in iterable]
[expression1(item) if conditional1 else expression2(item) for item in iterable if conditional2]
가치item
는 어떤 조건절에서도 사용할 필요가 없습니다.aconditional3
는 출력 목록에 값을 추가하거나 추가하지 않는 스위치로 사용할 수 있습니다.
예를 들어 원래 문자열 목록에서 빈 문자열 또는 공백 문자열을 제거하는 새 목록을 작성하려면 다음 절차를 수행합니다.
newlist = [s for s in firstlist if s.strip()]
3진법의 if/thenary if / then / else제 생각에 당신의 질문은 다음과 같습니다.
row = [unicode((x or '').strip()) for x in row]
조건부 로직은 다음과 같이 조합할 수 있습니다.
ps = PorterStemmer()
stop_words_english = stopwords.words('english')
best = sorted(word_scores.items(), key=lambda x: x[1], reverse=True)[:10000]
bestwords = set([w for w, s in best])
def best_word_feats(words):
return dict([(word, True) for word in words if word in bestwords])
# with stemmer
def best_word_feats_stem(words):
return dict([(ps.stem(word), True) for word in words if word in bestwords])
# with stemmer and not stopwords
def best_word_feats_stem_stop(words):
return dict([(ps.stem(word), True) for word in words if word in bestwords and word not in stop_words_english])
# coding=utf-8
def my_function_get_list():
my_list = [0, 1, 2, 3, 4, 5]
# You may use map() to convert each item in the list to a string,
# and then join them to print my_list
print("Affichage de my_list [{0}]".format(', '.join(map(str, my_list))))
return my_list
my_result_list = [
(
number_in_my_list + 4, # Condition is False : append number_in_my_list + 4 in my_result_list
number_in_my_list * 2 # Condition is True : append number_in_my_list * 2 in my_result_list
)
[number_in_my_list % 2 == 0] # [Condition] If the number in my list is even
for number_in_my_list in my_function_get_list() # For each number in my list
]
print("Affichage de my_result_list [{0}]".format(', '.join(map(str, my_result_list))))
(venv) $python list_comp.py
어피샤지 드 my_list [0, 1, 2, 3, 4, 5]
4, 8, my_result_list [0, 5, 4, 7, 8, 9]
고객님께는 다음과 같습니다.row = [('', unicode(x.strip()))[x is not None] for x in row]
언급URL : https://stackoverflow.com/questions/4260280/if-else-in-a-list-comprehension
'source' 카테고리의 다른 글
Express를 사용하여 NodeJS 서버에서 파일 다운로드 (0) | 2023.02.01 |
---|---|
어떻게 mysql에서 같은 테이블에 두 번 앉지? (0) | 2023.02.01 |
MySQL 문자열에서 n번째 단어와 단어 발생 횟수를 추출하는 방법은 무엇입니까? (0) | 2023.02.01 |
데이터베이스 가져오기 오류 구문 (0) | 2023.02.01 |
PHP sprintf 이스케이프 % (0) | 2023.02.01 |