본문 바로가기
Python/Data Structure

[Python] 리스트에서 특정 부분만 잘라내기

by 전봇대파괴자 2021. 10. 15.

아래와 같은 두 개의 리스트가 존재한다고 하겠습니다.

sample_list1 = ['a', 'b', 'c', 'd']
sample_list2 = ['c', 'd']

여기서 sample_list1에서 sample_list2에 해당하는 부분만 제외하고 출력하려면 어떻게 해야 할까요?

index를 이용해 슬라이싱하는 방법도 있지만, 그건 sample_list1의 값들이 위의 예시와 같은 순서로 있을 때만 가능한 방법입니다. 예를 들어 ['a', 'b', 'c', 'd']가 아니라 ['a', 'd', 'c', 'b']라고 하면? 사용할 수 없죠. 

 

그럼 리스트에 속한 item들의 순서와는 상관없이 조건에 맞는 리스트를 만들고, 출력하려면 어떻게 해야 할까요?

# sample_list2에 없는 값 v만을 모아 sample_list3 생성
sample_list3 = [v for v in sample_list1 if v not in sample_list2]
print(sample_list3)

>> ['a', 'b']

사실 for문과 if문을 한 줄 한 줄 넣어 더 길게 만들 수도 있지만,

파이썬에서는 위와 같이 리스트 안에서 for문을 돌면서 if문으로 조건까지 주어 그에 맞는 리스트를 생성할 수 있습니다. 

다른 예시를 하나만 더 보겠습니다. 

# 0~9999까지의 정수를 담은 리스트 생성
sample_list4 = [i for i in range(10000)]

 위의 리스트에서 9의 배수인 값들만 뽑아 출력하고 싶습니다. 

# 9의 배수만 담아 출력
filter_list = [v for v in sample_list4 if v%9==0 and v >= 9]
print(filter_list)

>> [9, 18, 27, 36, 45, 54, 63,...9990, 9999]

보기와 같이 출력하는 것이 가능합니다.