이 글에서는 파이썬의 두 가지 핵심 기능인 리스트 슬라이싱(List Slicing)과 리스트 컴프리헨션(List Comprehension)에 대해 자세히 알아보겠습니다. 이 두 기능을 잘 활용하면 코드를 훨씬 간결하고 효율적으로 작성할 수 있습니다.
리스트 슬라이싱이란?
슬라이싱(Slicing)은 말 그대로 무언가를 잘게 조각내는 것을 의미합니다. 리스트 슬라이싱은 원본 리스트에서 원하는 부분만 추출해 내는 과정입니다. 시작 위치, 종료 위치, 그리고 증가 단계(step)를 지정하여 리스트를 원하는 형태로 자를 수 있습니다.
리스트 컴프리헨션이란?
리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 생성하는 기법입니다. 반복문과 조건문을 한 줄로 압축하여 표현할 수 있어, 기존 리스트로부터 새로운 리스트를 정의하고 만드는 우아하고 파이썬다운 방법으로 널리 사용됩니다.
리스트 슬라이싱 사용법
리스트를 슬라이싱하기 위해 먼저 예제용 리스트를 생성해 보겠습니다.
>>> mylist = ["Which ", "Language ", "To ", "Choose ", "Difficult, ", "Python ",
"Java ", "Kotlin ", "Many more"]파이썬 리스트는 역방향 인덱싱도 지원합니다. -1부터 시작하여 -1씩 증가하는 방식으로, -1은 마지막 요소, -2는 뒤에서 두 번째 요소를 가리킵니다.
>>> mylist_slice1 = mylist[0: -1:2] >>> mylist_slice1 ['Which ', 'To ', 'Difficult, ', 'Java ']
리스트를 슬라이싱할 때는 먼저 대상 리스트(여기서는 mylist)를 호출한 뒤, 대괄호 [] 안에 슬라이싱 조건을 지정합니다. 대괄호 안에 전달할 수 있는 인자는 다음과 같습니다.
- 첫 번째 인자: 슬라이싱을 시작할 인덱스
- 두 번째 인자: 슬라이싱을 멈출 인덱스 (해당 인덱스는 포함되지 않음)
- 세 번째 인자: 슬라이싱 단계/증가값 (선택 사항)
정리하면 다음과 같은 형태가 됩니다.
mylist[START: STOP:STEP] >>> mylist_slice2 = mylist[1:-1:2] >>> mylist_slice2 ['Language ', 'Choose ', 'Python ', 'Kotlin ']
위 예제에서 인덱스 1부터 시작하여 마지막 요소 직전까지, 2칸씩 건너뛰며 요소를 추출한 결과를 확인할 수 있습니다.
리스트 컴프리헨션 사용법
앞서 설명했듯이 리스트 컴프리헨션은 기존 데이터로부터 새로운 리스트를 생성합니다. range() 함수를 사용해 숫자 리스트를 만들어 보겠습니다.
>>> mylist1 = [x for x in range(0, 40)]
>>> mylist1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
>>>
>>> mylist2 = [x for x in range(0,41) if x%2 == 0]
>>> mylist2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]위 코드의 동작 방식을 살펴보겠습니다. 먼저 임시 변수 "x"를 선언하고, for 반복문으로 0부터 40 범위의 값을 순회합니다. 실행하면 0부터 39까지의 숫자 리스트가 생성됩니다.
두 번째 예제에는 if x%2 == 0이라는 조건이 추가되었습니다. x를 2로 나눈 나머지가 0인 경우, 즉 짝수만 추출하여 새로운 리스트를 만드는 것입니다. 이처럼 조건문을 함께 사용하면 원하는 값만 필터링할 수 있습니다.
이번에는 문자열 리스트로 리스트 컴프리헨션을 활용해 보겠습니다.
>>> strlist = ["This", "Is", "A" , "List" , "Of", "Strings", "For", "List", "Comprehension"] >>> print([x.lower() for x in strlist]) ['this', 'is', 'a', 'list', 'of', 'strings', 'for', 'list', 'comprehension']
위 예제에서는 문자열 리스트의 모든 항목에 lower() 메서드를 적용하여, 리스트 컴프리헨션 한 줄로 모든 문자열을 소문자로 변환했습니다. 이처럼 리스트 컴프리헨션은 데이터 변환 작업도 매우 간단하게 처리할 수 있습니다.