Language/Python

Python - slice(), slicing하기 원하는 index를 정의하는 클래스

TechNote.kr 2018. 1. 4. 16:13
728x90


slice



>>> slice(stop)

>>> slice(start, stop[, step])


잘라내기 원하는 index 들을 정의하는 클래스이다. 


slice object에 대해 한마디로 표현하기가 쉽지 않다. 



원활한 이해를 위해 예를 들면 다음과 같다. 


먼저, sample = "abcdefghijklmn" 이라는 문자열이 있다고 하자.


이 중 sample[2] 부터 sample[5] 전 까지의 문자열만 빼내고 싶다면 어떻게 하면 될까? (즉, index 2부터 4까지 표시한다.)

>>> sample = "abcdefghijklmn"
>>> sample[2:5]
'cde'

위와 같이 colon (:) 을 이용하여 추출해 내면 된다.


[Slice Notation ":" 을 이용한 나누기]


>>> a = "abcdefg"
>>> b = "hijklmn"
>>> c = "opqrstu"
>>> d = "vwxyz"
>>> a[1:3]
'bc'
>>> b[1:3]
'ij'
>>> c[1:3]
'pq'
>>> d[1:3]
'wx'


반면 위와 같이 서로 다른 문자열에 대해서 동일한 위치를 잘라내고자 한다면 어떨까?


위와 같은 경우에 대해서 slice object를 사용하면 좋을 듯 하다. (위와 같이 interprete mode가 아니고 code 기반 일 경우)



>>> sl = slice(1,3)
>>> a[sl]
'bc'
>>> b[sl]
'ij'
>>> c[sl]
'pq'
>>> d[sl]
'wx'


위의 예에서는 하나의 slice object만 선언하고 사용하였지만, 여러 slice object를 선언해 놓고 상황에 맞게 사용할 수 있다. 


slice object 생성시 전달되는 argument는 range나 xrange의 것과 동일하다. 


참조> range 사용, xrange 사용


__builtin__ module에 포함된 class 이다.



slice object에 전달된 인자들은 아래와 같이 확인이 가능하다. 

>>> sl = slice(1,3)
>>> sl
slice(1, 3, None)
>>> sl.start
1
>>> sl.stop
3
>>> sl.step


한번 전달된 argument들은 read-only라서 추후 수정이 불가능하다. 

>>> sl.start = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: readonly attribute





>>> help(slice)


Help on class slice in module __builtin__:


class slice(object)

 |  slice(stop)

 |  slice(start, stop[, step])

 |

 |  Create a slice object.  This is used for extended slicing (e.g. a[0:10:2]).

 |

 |  Methods defined here:

 |

 |  __cmp__(...)

 |      x.__cmp__(y) <==> cmp(x,y)

 |

 |  __getattribute__(...)

 |      x.__getattribute__('name') <==> x.name

 |

 |  __hash__(...)

 |      x.__hash__() <==> hash(x)

 |

 |  __reduce__(...)

 |      Return state information for pickling.

 |

 |  __repr__(...)

 |      x.__repr__() <==> repr(x)

 |

 |  indices(...)

 |      S.indices(len) -> (start, stop, stride)

 |

 |      Assuming a sequence of length len, calculate the start and stop

 |      indices, and the stride length of the extended slice described by

 |      S. Out of bounds indices are clipped in a manner consistent with the

 |      handling of normal slices.

 |

 |  ----------------------------------------------------------------------

 |  Data descriptors defined here:

 |

 |  start

 |

 |  step

 |

 |  stop

 |

 |  ----------------------------------------------------------------------

 |  Data and other attributes defined here:

 |

 |  __new__ = <built-in method __new__ of type object>

 |      T.__new__(S, ...) -> a new object with type S, a subtype of T





728x90