Python 목록(배열)의 특정 요소 추출, 교체 및 변환

사업

특정 조건을 만족하는 기존 목록(배열)의 요소만 추출 또는 삭제하거나 대체 또는 변환을 수행하여 Python에서 새 목록을 생성하려면 목록 이해를 사용하십시오.

다음은 샘플 코드와 함께 여기에 설명되어 있습니다.

  • 목록 이해 표기법의 기본 형식
  • 목록의 모든 요소에 프로세스 적용
  • 기준을 충족하는 목록에서 요소 추출 및 삭제
  • 목록의 조건을 만족하는 요소를 바꾸거나 변환

문자열 목록의 특정 예는 다음 문서를 참조하십시오.

기준에 맞지 않는 요소를 무작위로 추출하는 것도 가능합니다.

목록은 다양한 유형의 데이터를 저장할 수 있으며 배열과 완전히 다릅니다. 메모리 크기와 메모리 주소가 필요한 프로세스에서 배열을 처리하거나 대용량 데이터의 수치 처리를 수행하려면 배열(표준 라이브러리) 또는 NumPy를 사용하십시오.

다음 목록은 예시입니다

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

목록 이해 표기법의 기본 형식

목록에서 새 목록을 생성할 때 목록 이해는 for 루프보다 작성하기가 더 간단합니다.

[expression for any variable name in iterable object if conditional expression]

반복 가능한 객체(예: 목록 또는 튜플)의 조건식을 만족하는 요소에 표현식이 적용되어 새 목록의 요소가 됩니다. “if 조건식”은 생략할 수 있으며 이 경우 모든 요소에 표현식이 적용됩니다.

중첩 목록 이해 표기법을 포함한 자세한 내용은 다음 문서를 참조하세요.

목록의 모든 요소에 프로세스 적용

예를 들어 목록의 모든 요소에 일부 처리를 적용하려는 경우 위의 목록 이해 표현식에서 원하는 처리를 설명합니다.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

이것은 숫자 목록과 문자열 목록 사이를 변환하는 데 사용할 수 있습니다.

기준을 충족하는 목록에서 요소 추출 및 삭제

요소가 조건식으로만 선택되어야 하는 경우에는 표현식으로 처리하지 않으므로 다음과 같은 형식을 취합니다.

[variable name for variable name in original list if conditional expression]

조건을 만족하는 요소(조건식이 참인 요소)만 추출되는 새 목록이 생성됩니다.

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

“조건식인 경우”를 “조건식이 아닌 경우”로 설정하면 부정이 되어 조건을 만족하지 않는 요소(조건식이 거짓인 요소)만 선택하여 추출할 수 있습니다. 즉, 조건을 만족하는 요소가 제거되는 새 목록이 생성됩니다.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

물론 not을 사용하지 않고 동등한 조건식을 지정해도 같은 결과를 얻을 수 있다.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

조건식 부분은 여러 조건일 수 있습니다. 음수 not도 사용할 수 있습니다.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

목록의 조건을 만족하는 요소를 바꾸거나 변환

위의 요소 추출 예에서는 조건을 충족하지 않는 요소를 제거했습니다.

조건을 만족하는 요소에 대해서만 치환, 변환 등을 수행하고 싶다면 목록 내포 표기법의 표현식 부분에 삼항 연산자를 적용한다.

Python에서 삼항 연산자는 다음과 같이 작성할 수 있습니다.

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

조금 복잡하지만 목록 이해 표기법과 삼항 연산자의 조합은 다음과 같습니다.

[True Value if Conditional Expression else False Value for any variable name in original list]

괄호로 묶인 부분은 삼항 연산자입니다(실제 코드에서는 괄호가 필요하지 않습니다).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

true 또는 false 값에 대해 변수 이름을 있는 그대로 작성하면 원래 요소의 값이 있는 그대로 사용됩니다. 표현식이 작성되면 해당 표현식의 처리가 적용됩니다.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]