[kr-dev] 파이썬 핵심 문법 - 슬라이스

in kr •  7 years ago  (edited)

파이썬의 장점은 프로그래밍 언어가 가지는 가독성입니다.

고전적인 블럭 구획을 위해 { } 괄호같은 것을 과감히 제거하고, 마치 말을 하는 듯한 프로그래밍 표현이 가능합니다.

다음과 같이 몇 개의 문자열로 된 코인명을 담고 있는 리스트를 예로 들면,

coins = ['BTC', 'BCH', 'ETH', 'XRP', 'STEEM', 'SBD']

"coins 변수 안에 있는 각각의 코인들에 대해서 출력하라" 고 할 경우, 아래와 같이 코드로 표현됩니다.

for coin in coins: 
    print (coin)



이것은 고전적인 'for( int = 0 ; i < 10 ; i++)' 과 같은 루프문을 획기적으로 줄여주는 기능을 하게 됩니다.

사실 프로그램을 짜는 가장 큰 이유가 단순반복 작업을 피하기 위함이고, 루프는 바로 그 해결방안이기 때문에 모든 프로그래밍에서 if 문 만큼이나 자주쓰이는게 루프문입니다.

오늘 소개하려는 파이썬만의 독창적인 기능인 slice의 필요성이 바로 여기서 잘 드러납니다.

슬라이스의 기본적인 기능은 정보들이 저장되어 있는 자료형에서 필요한 부분만 빼 내는 것을 말합니다.

위에서 언급한 coins 변수에서 첫번째 항목을 꺼낸다고 할 경우 기본적인 배열이나 리스트의 인덱싱 기법으로 다음과 같이 꺼낼 수 있습니다.

coins[0]

같은 동작을 slice 방법으로 구현하면 아래와 같습니다

coins[0:1]

coins변수에서 0번째 항에서부터 1번째 항 이전까지를 가져오는 것입니다. 즉, 1개가 아니라 여러개의 coin을 꺼내올 수도 있다는 말이지요.

coins[3:5]

이와 같이 실행하면 3번째, 4번째, 5번째 코인명이 포함된 새로운 리스트를 반환해줍니다.

이를 활용해서 3~5번째 코인에 대해서만 루프문을 돌리고 싶을때는 아래와 같이 표현할 수 있죠

for coin in coins[3:5]:
      print(coin)


슬라이스 기능이 여기까지라면 사실 다른 언어보다 쪼~금 편한 것 이상 없었겠지만, 이제 본격적인 슬라이스의 막강한 기능을 소개해 드리겠습니다.

시계열 테이터를 처리하는데 있어서 가장 중요한 시점은 바로 현재 입니다. 그렇기 때문에 최근 시점에서 가까운 데이터일수록 가중치를 주고 이동평균을 계산하기도 하구요.

이때 굉장히 유용한 슬라이싱이 바롤 '뒤에서 부터' 기법입니다.

# 맨 뒤의 item
coins[-1] 

# 맨 뒤에서부터 item 2개
coins[-2:] 

# 맨 뒤의 item n개 빼고 전부
coins[:-n] 



이제 조금 더 복잡하지만, 생각해보면 무시무시할만큼 유용한 슬라이싱 방법을 소개하겠습니다.

슬라이싱의 문법은 사실 인자가 세개입니다.

[시작:끝:단계]

coins변수에 저장되어 있는 코인들의 홀수 번째 항목을 가져오고 싶다면

coins[::2]

coins변수에서 짝수번째 항목을 가져오고 싶다면

coins[1::2]

그리고 coins 변수에 담긴 3~5번째 항목의 홀수 번째 항목을 가져오고 싶다면, 약간의 조합을 통해 coins[3:5:2]가 되겠습니다.

이제 마지막으로 황당할 정도로 신기하지만 매우 유용한 슬라이스 기법을 알려드리고 포스팅을 마치도록 하겠습니다.

coins[::-1]

과연 이건 무슨 뜻일까요? ^^

정의에 입각하여 설명하자면 단계가 거꾸로 1개씩 진행한다는 뜻입니다.

바로 coins에 담긴 변수를 역순으로 뒤집어 주는 기능을 합니다.

오.. 볼때마다 신기합니다. ^^

사실 요즘 프로그래밍 언어들과 프레임웍들이 워낙 다양한 요구를 받아들이고 있어서 파이썬이 아니 다른 언어에서도 슬라이스 기능이 간편하게 제공되고 있을지는 모르지만, 제가 아는 한에서는 위에서 언급한 슬라이스 기능들이 다른 무엇보다 코딩을 편하게 해주는 것 같습니다.

재미있으셨다면 추천 한번 부탁드립니다.


※ 파이썬을 이용한 투자 포스팅은 #kr-systemtrading에서 보실 수 있습니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

오홍 step도 조정이 가능했군요.. 꿀팁 감사합니다. 'ㅅ')/