Python에서 목록을 필터링하는 올바른 방법으로 데이터를 최대한 활용하는 방법

파이썬에서 순서대로 정렬된 데이터를 보관하는 데 가장 흔히 사용되는 방법 중 하나는 리스트를 이용하는 것입니다. 파이썬의 리스트는 데이터 컬렉션을 저장하는 데 사용되는 정렬되고 수정 가능한 기본 제공 데이터 구조입니다. 리스트에 저장된 항목은 0부터 시작하는 인덱스를 가지며, 사용자는 리스트 생성 후 내용을 변경할 수 있습니다.

리스트의 항목이 인덱싱된다는 점 때문에, 중복 항목을 저장하는 것이 가능합니다. 파이썬 리스트는 또한 서로 다른 데이터 타입의 요소들을 포함할 수 있습니다. 리스트 내 항목들은 쉼표로 구분되고 대괄호로 묶여 표현됩니다.

다음은 파이썬에서 리스트의 몇 가지 예시입니다.

# 한 가지 데이터 타입(문자열)만 포함하는 리스트
colors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']

# 여러 데이터 타입을 포함하는 리스트
movies = ['Transformers', 2012, 'Avengers', 300]

# 중복된 값을 포함하는 리스트
users = ['John', 'Mary', 'Elizabeth', 'John']

리스트는 매우 다양한 데이터 구조이며, 리스트에 저장된 데이터에 대해 많은 연산을 수행할 수 있습니다. 리스트에서 수행되는 일반적이고 유용한 작업 중 하나는 리스트에 저장된 데이터를 필터링하는 것입니다.

리스트 필터링이 중요한 이유

리스트 필터링은 주어진 조건을 만족하는 특정 데이터 하위 집합을 추출하는 것을 의미합니다. 예를 들어, 1부터 10까지의 숫자를 포함하는 리스트에서 짝수만 필요할 수 있습니다. 이 데이터를 추출하려면, 리스트를 필터링하여 2로 정확하게 나누어 떨어지는 숫자만을 얻으면 됩니다.

필터링은 리스트에서 불필요한 항목을 제거하고, 특정 조건을 만족하는 항목들을 포함하는 새로운 리스트를 생성하며, 특정 조건을 충족하는 데이터를 추출할 수 있게 해줍니다. 따라서 데이터 조작 및 분석에 특히 유용합니다.

리스트 필터링의 실제 응용 사례는 다음과 같습니다.

  • 데이터 유효성 검사 – 리스트를 다룰 때, 특정 기준을 만족하는 데이터로만 작업하고 싶을 수 있습니다. 예를 들어, 사용자 리스트에서 성과 이름이 모두 있는 사용자에게만 관심이 있을 수 있습니다. 필터링을 이용하면, 처리 전에 리스트 내 데이터를 확인하고 유효성을 검증할 수 있습니다. 이를 통해 요건을 충족하지 않는 데이터 작업은 피할 수 있습니다.
  • 데이터 정리 – 리스트는 다양한 데이터 타입을 저장할 수 있기 때문에, 원하지 않거나 불필요한 데이터가 포함된 리스트를 찾는 것은 흔한 일입니다. 예를 들어, 이름 목록에 숫자 데이터가 포함될 수 있습니다. 필터링을 사용하면 불필요한 데이터를 제거할 수 있습니다.
  • 데이터 분석 – 데이터 필터링은 패턴과 추세를 보다 쉽게 식별할 수 있도록 데이터의 특정 하위 집합에 집중할 수 있기 때문에, 데이터 분석에서 특히 유용합니다. 예를 들어, 학생 리스트에서 남학생과 여학생을 필터링하고, 그 결과를 데이터 분석에 활용할 수 있습니다. 연령, 위치 및 학년별로 필터링할 수도 있습니다. 이를 통해 리스트에 있는 데이터의 특정 하위 집합에서 더 의미있는 결론을 도출할 수 있습니다.

리스트 필터링은 관심 있는 데이터로만 작업할 수 있도록, 리스트에 저장된 데이터를 제어할 수 있게 해주는 매우 유용한 기능입니다.

리스트에 저장된 데이터의 특정 하위 집합을 지정하는 것은 데이터 처리와 분석을 간소화하여 프로세스를 더 빠르고 정확하게 만들어주기 때문에 매우 유용합니다.

filter() 함수 사용

filter() 함수는 리스트, 튜플, 세트, 딕셔너리와 같은 이터러블을 순회하며, 주어진 조건을 만족하는 항목을 추출하는 데 사용할 수 있는 내장 파이썬 함수입니다.

파이썬에서 이터러블은 요소를 하나씩 순회할 수 있는 객체를 의미합니다. 이터러블을 순회하면, 이터러블의 항목들이 한 번에 하나씩 반환됩니다.

filter() 함수의 구문은 다음과 같습니다.

filter(function, iterable)

function – 필터링 조건을 포함하는 파이썬 함수

iterable – 필터링할 이터러블입니다. 여기서는 리스트를 사용합니다.

filter() 함수는 전달된 함수를 받아, 전달된 이터러블의 각 항목에 적용하여 항목에 대한 필터링 조건을 테스트합니다. 항목이 조건을 만족하면, 즉 filter() 함수에 의해 선택되어야 할 경우 불리언 값 True를 반환합니다. 조건을 만족하지 못하면 항목은 선택되지 않습니다.

filter() 함수는 필터링 조건을 통과한 항목들을 포함하는 이터러블을 반환합니다. list() 함수를 사용하여, 필터링 조건을 통과한 항목들을 포함하는 새 리스트를 만들 수 있습니다.

filter() 함수의 작동 방식을 확인하기 위해, 50 미만의 숫자만 선택하도록 필터링된 아래 리스트를 고려해 보겠습니다.

# 숫자 리스트
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]

# 필터링 조건을 포함하는 함수
def is_even(num):
   if num < 50:
      return True
   else:
      return False

# list() 함수를 사용하여 filter() 함수에서 반환된 이터러블로부터 리스트 생성
filtered_numbers = list(filter(is_even, numbers))
print(filtered_numbers)

위 코드는 다음 결과를 출력합니다.

[15, 46, 24, 37]

for 루프 사용

파이썬에서 for 루프는 리스트, 튜플, 문자열, 배열과 같은 순차적인 데이터 구조를 순회하는 데 사용되는 제어 흐름 문입니다. for 루프는 시퀀스 내 각 항목에 대해 코드 블록을 반복적으로 실행합니다.

for 루프의 일반적인 구문은 다음과 같습니다.

for item in iterable:
    # 이터러블 내 각 항목에 대해 실행될 코드 블록

item – 루프 반복에서 처리 중인 현재 항목을 나타내는 변수

iterablefor 루프가 순회할 시퀀스. 이 경우 리스트

for 루프를 사용하여 리스트를 필터링하려면, 실행할 코드 블록 섹션에 필터링 조건을 전달해야 합니다. 이를 통해 각 항목이 주어진 조건을 만족하는지 평가할 수 있습니다.

for 루프를 사용하여 리스트를 필터링할 때, 필터링 조건을 통과하는 값들을 추가할 빈 리스트를 만들어야 합니다.

실제로 확인하기 위해, for 루프를 사용하여 숫자 리스트를 필터링하여 50 미만의 숫자들을 얻어보겠습니다.

numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]

filtered_numbers = []

for num in numbers:
    if num < 50:
        # append()를 사용하여 조건을 만족하는 숫자를 filtered_numbers에 추가
        filtered_numbers.append(num)

print(filtered_numbers)

위 코드는 다음 결과를 출력합니다.

[15, 46, 24, 37]

다른 리스트 사용

필터링하려는 리스트의 항목이 다른 리스트에 나타나는지 확인하여 다른 리스트를 사용해서 리스트를 필터링할 수 있습니다. 예를 들어, 다음 두 리스트를 고려해 보겠습니다.

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']

vowels = ['a', 'e', 'i', 'o', 'u']

위의 letters 리스트에서, 모음 리스트에 항목이 나타나는지 확인하여 리스트의 항목이 모음이 아닌지 확인할 수 있습니다. 모음 리스트에 항목이 나타나지 않으면 모음이 아닙니다.

이를 통해 모음이 아닌 문자들의 모든 문자를 얻을 수 있습니다. 이렇게 하려면 다음 코드를 실행합니다.

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']

not_vowel = []

for letter in letters:
    if letter not in vowels:
        not_vowel.append(letter)
print(not_vowel)

위 코드는 모음이 아닌 문자들을 포함하는 다음 출력을 생성합니다.

['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']

리스트 컴프리헨션 사용

파이썬에서 리스트 컴프리헨션은 기존 리스트로부터 새로운 리스트를 생성하기 위한 더 짧고, 간결하고, 깔끔한 구문을 제공합니다. 리스트 컴프리헨션은 for 루프를 사용하여 다른 리스트로부터 새 리스트를 만드는 데 사용되는 여러 줄의 코드를 한 줄로 줄이는 기능을 가지고 있습니다.

리스트 내포를 사용할 때, 한 줄에 항목을 정의하고 새로운 리스트에 추가하기 때문입니다.

리스트 컴프리헨션의 구문은 다음과 같습니다.

new_list = [expression for element in iterable if condition]

new_list – 리스트 컴프리헨션에 의해 추가된 요소를 포함하는 새로운 리스트

expression – 이터러블의 각 항목에 적용될 연산

item – 이터러블에서 현재 활성 항목을 나타내는 변수 이름

iterable – 항목을 선택할 이터러블

if condition – 주어진 조건을 만족하는 항목만 생성 중인 새로운 리스트에 추가하기 위해 항목을 필터링하는 조건을 추가할 수 있는 선택적인 부분입니다.

작동 중인 리스트 컴프리헨션을 확인하고, 새 리스트를 필터링하고 생성하는 프로세스를 얼마나 단순화할 수 있는지 확인하기 위해, 문자 및 모음 리스트를 사용하여 모음 리스트에 없는 문자 리스트의 항목을 필터링합니다. 이렇게 하려면 다음 코드를 실행합니다.

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']

# 리스트 컴프리헨션
not_vowel = [letter for letter in letters if letter not in vowels]
print(not_vowel)

위 코드의 출력은 다음과 같습니다.

['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']

출력은 다른 리스트를 사용하여 리스트를 필터링하기 위해 for 루프를 사용했던 이전 예제와 동일합니다. 하지만 동일한 결과를 얻기 위해 더 적은 수의 코드를 사용합니다.

결론

파이썬에서 데이터를 다룰 때 수행해야 하는 일반적인 작업 중 하나는, 리스트와 같은 이터러블에서 데이터를 필터링하는 것입니다. 이는 수행 중인 작업 또는 처리와 관련된 데이터로만 작업할 수 있게 해주므로, 데이터 분석 및 처리에서 매우 유용한 단계입니다.

파이썬에서 매우 인기 있는 순차 데이터 구조는 리스트입니다. 리스트를 다루고 필터링해야 한다면, 문서에 강조 표시된 방법 중 하나를 사용하는 것을 추천합니다.

예제와 함께 파이썬에서 람다 함수를 사용하는 방법에 대해 읽어볼 수도 있습니다.