본문 바로가기
파이썬의 기본

[파이썬의 기본] 1차원 배열(list)의 슬라이싱(slicing)

by 루껍 2022. 8. 9.
반응형

이번 포스팅에서는 "배열의 특정 요소만을 불러오는 방법"에 대해서 알아보겠습니다.

 

먼저, 간단한 예를 보겠습니다.

arr1 = [i+1 for i in range(10)]      # 1부터 10까지의 정수로 구성된 배열 생성
print('arr1:', arr1)

new_list = []                        # arr1에서 짝수만을 저장할 새로운 배열 생성
 
for i in range(10):                  # 반복문을 통해 arr1의 요소들에 순차적으로 접근
    if arr1[i]%2 == 0:              # 2로 나누었을 때, 나머지가 0인 경우(짝수인 경우)
        new_list.append(arr1[i])    # 앞서 만든 빈 배열에 해당 요소를 저장

print('new_list:', new_list)

우리는 1부터 10까지의 정수로 구성된 배열에서 짝수만을 골라서 새로운 배열에 저장하고 싶습니다.

그렇다면, 위와 같이 반복문과 조건문을 통해 새로운 배열을 생성할 수 있습니다.

 

하지만, 파이썬에서는 이보다 더 간단한 방법을 제공하는데, 바로 "슬라이싱(slicing)"입니다.

 

기본개념

슬라이싱(slicing) : 배열(or 연속된 객체의 자료형)내의 특정 요소들특정 규칙으로 불러오는 방법

 

사용방법

start : 슬라이싱하고자하는 요소의 첫번째 인덱스

 

end : 슬라이싱을 마칠 위치

※ end를 "슬라이싱하고자하는 요소의 마지막 인덱스"로 정의하지 않은 이유는 end에 해당하는 인덱스는 포함되지 않기 때문입니다. 즉, "개구간"의 개념과 동일합니다.

 

step : 슬라이싱할 요소들의 간격

※ "step"의 기본값(Default)은 1입니다.

 

 

예제

 

ex1) 슬라이싱의 기본

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice1 = arr1[0:3]
print('slice1:', slice1)

slice2 = arr1[0:3:1]
print('slice2:', slice2)

slice1과 slice2의 출력값이 같은 것을 통해 "step"의 기본값은 1임을 확인할 수 있습니다.

 

슬라이싱 된 데이터(slice1, slice2) 자료형은 "배열"임을 알 수 있습니다.

 

 

ex2) step이 양수인 경우

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice3 = arr1[0:10:2]
print('slice3:', slice3)

step을 2로 설정함으로써, 인덱스 0, 2, 4, 6, 8에 해당하는 값들을 불러왔습니다.

 

 

ex3) step이 음수인 경우

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice4 = arr1[0:10:-1]
print('slice4:', slice4)

slice5 = arr1[10:0:-1]
print('slice5:', slice5)

slice6 = arr1[10:-11:-1]
print('slice6:', slice6)

slice4의 출력결과를 통해 step의 부호슬라이싱의 방향을 의미함을 알 수 있습니다.

 

slice5의 경우, 0이 end에 해당하기 때문에 인덱스 1까지 출력된 것을 확인할 수 있습니다.

 

slice6의 경우, end값에 -1이 아닌 -11을 입력하여 배열 전체를 역순으로 불러올 수 있었습니다. 

이는 arr1의 첫번째 요소 0의 인덱스 값이 0임 동시에 -10이기 때문입니다.

 

인덱스에 대한 자세한 내용은 다음 포스팅을 참고해주시길 바랍니다.

 

 

[파이썬의 기본] 1차원 배열(list)의 인덱싱

이번 포스팅에서는 배열의 특징에 대해서 알아보겠습니다. '배열(list)'이라는 자료형은 다음과 같은 특징을 갖습니다. 1) 배열에 저장된 요소들에는 순서가 있다. (↔집합(set)) 2) 배열에 저장된

look-up-onceaday.tistory.com

 

 

ex4) 전체의 슬라이싱

 

앞서 step에 값을 입력하지 않으면 기본값인 1이 자동으로 부여됨을 확인했습니다.

그렇다면 start, end 에 값을 입력하지 않으면 어떨까요?

 

값을 입력하지 않음으로써, 전체에 대한 슬라이싱을 보다 쉽게 할 수 있습니다.

 

 

ex4-1) start 값의 생략

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice7 = arr1[:10]
print('slice7:', slice7)

start 값을 생략하고, end 값만 입력함으로써, 10미만의 모든 인덱스에 해당하는 요소들을 불러왔습니다.

 

 

ex4-2) end 값의 생략

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice8 = arr1[1:]
print('slice8:', slice8)

end 값을 생략하고, start 값만 입력함으로써, 1이상의 모든 인덱스에 해당하는 요소들을 불러왔습니다.

 

 

ex4-3) start, end 값의 생략

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice9 = arr1[::]
print('slice9:', slice9)

slice10 = arr1[:]
print('slice10:', slice10)

 

start 값과 end 값을 모두 생략함으로써, 배열 전체를 불러왔습니다.

slice9과 slice10의 출력 결과가 같음을 통해 대괄호안에 콜론(:)을 1개 입력하나 2개 입력하나 결과는 같음을 알 수 있습니다.

그 원리를 세세히 알아보면 다음과 같습니다.

 

slice9 : start, end, step 값이 모두 생략(step의 기본값 : 1)

slice10 : start, end 값 생략 / step 입력란의 생략(step의 기본값:1)

 

 

※ 주의사항(콜론의 개수)

arr1 = [i for i in range(10)]

print('arr1:', arr1)

slice11 = arr1[::1]
print('slice11:', slice11)

slice12 = arr1[:1]
print('slice12:', slice12)

 

start 값과 end 값 없이, step 값만을 이용하여 배열을 출력하고 싶은 경우, 반드시 콜론을 2개 모두 입력해야 합니다.

 

slice11 : start값과 end값의 생략으로 1로 주어진 step에 의해 슬라이싱 되었습니다.

slice12 : step 값으로 입력한 1이 end 값으로 인식되어 0번째 인덱스 값만 슬라이싱 되었습니다.

반응형

댓글