Slicing

JInwoo·2025년 2월 3일

Slice Object

python의 모든 sequence들은 slicing이 가능하다. [a:b:c] 형태로 slicing이 가능하며 c 는 건너 뛰는 step을 의미한다. 이 떄 c 는 음수 값도 가능하며, 이 경우 값을 반대로 조회한다.

s = "bicycle
s[::-1] # "elcycib"
s[::-2] # "eccb"

a:b:c 형태는 오로지 [] 안에서만 쓸 수 있다. [a:b:c]slice(a, b, c) object를 생성한다. 즉 seq[a:b:c]seq.__getitem__(slice(a, b, c)) 와 동일하다.

생성된 slice object에는 이름을 할당하는 것이 가능하다.

invoice = """
0.....6.................................40........52...55........
1909 Pimoroni PiBrella                      $17.50    3    $52.50
1489 6mm Tactile Switch x20                  $4.95    2    $9.90
1510 Panavise Jr. - PV-201                  $28.00    1    $28.00
1601 PiTFT Mini Kit 320x240                 $34.95    1    $34.95
"""

SKU = slice(0, 6)
DESCRIPTION = slice(6, 40)
UNIT_PRICE = slice(40, 52)
QUANTITY = slice(52, 55)
ITEM_TOTAL = slice(55, None)

line_items = invoice.split('\n')[2:]

for item in line_items:
    print(item[UNIT_PRICE], item[DESCRIPTION])

Multidimensional Slicing and Ellipsis

[] operator는 multiple indexes 또는 comma로 구분된 slice object들을 받을 수 있다. 이 경우 __getitem__ __setitem__ 은 indices를 tuple로 받게 된다.

a[i, j] == a.__geitem__((i,j))

또한 multidiensional slicing에 대해 python에서는 Ellipsis 라는 특이한 object를 제공한다. Ellipsis... 과 동일하며 x[i, ...] 같이 쓸 수 있다. 이는 x[i, :, :, :] 와 동일한 문법이다.

Multidimensional slicing 및 Ellipsis 는 사용자 정의 sequence 를 만들 떄 유용하게 사용할 수 있다.

Reference

Luciano Ramalho, Fluent Python, 2nd Edition, O'Reilly Media, Inc., April 2022

profile
Jr. AI Engineer

0개의 댓글