아래와 같은 두 개의 리스트가 존재한다고 하겠습니다.
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]
보기와 같이 출력하는 것이 가능합니다.
'Python > Data Structure' 카테고리의 다른 글
[Python] 특정 변수가 list/str/int/dict인지 확인하기 (0) | 2021.10.05 |
---|---|
[Python] for문으로 dict의 key, value 한꺼번에 꺼내기 (0) | 2021.10.04 |
[Python] 하나의 리스트를 index에 따라 쪼개기 (0) | 2021.08.26 |
[Python] 리스트 안의 이스케이프 문자 일괄 소거하기 (0) | 2021.08.20 |
[Python]리스트 값들 카운트하고 가장 빈도수 높은 값 찾기 (0) | 2021.08.19 |