Python의 슬라이스 할당 이해

Python의 슬라이스 할당 이해

2022-10-19 last update

7 minutes reading python beginners programming

기본 구문



Python의 슬라이스 할당을 이해하려면 최소한 슬라이싱이 어떻게 작동하는지 충분히 이해하고 있어야 합니다. 다음은 간략한 요약입니다.

[start_at:stop_before:step]


여기서 start_at는 반환될(포함) 첫 번째 항목의 인덱스이고, stop_before는 이전에 중지할(포함되지 않음) 요소의 인덱스이며, step는 두 항목 사이의 보폭입니다.

슬라이스 할당은 표현식의 오른쪽 대신 왼쪽에 사용된다는 유일한 예외를 제외하고 목록을 슬라이스하는 것과 동일한 구문을 갖습니다. 슬라이싱은 목록을 반환하므로 슬라이스 할당에는 목록(또는 다른 반복 가능)이 필요합니다. 그리고 이름에서 알 수 있듯이 오른쪽은 표현식의 왼쪽에 있는 슬라이스에 할당할 값이어야 합니다. 예를 들어:

nums = [1, 2, 3, 4, 5]

nums[:1] = [6]        # [6, 2, 3, 4, 5]   (replace elements 0 through 1)
nums[1:3] = [7, 8]    # [6, 7, 8, 4, 5]   (replace elements 1 through 3)
nums[-2:] = [9, 0]    # [6, 7, 8, 9, 0]   (replace the last 2 elements)


길이 변경



표현식의 왼쪽에 있는 슬라이스에 의해 반환된 목록 부분은 슬라이스 할당에 의해 변경될 목록 부분입니다. 즉, 슬라이스 할당을 사용하여 목록의 일부를 반환된 슬라이스와 길이도 다른 다른 목록으로 바꿀 수 있습니다. 예를 들어:

nums = [1, 2, 3, 4, 5]

nums[1:4] = [6, 7]    # [1, 6, 7, 5]        (replace 3 elements with 2)
nums[-1:] = [8, 9, 0] # [1, 6, 7, 8, 9, 0]  (replace 1 element with 3)
nums[:1] = []         # [6, 7, 8, 9, 0]     (replace 1 element with 0)


빈 조각을 고려하면 목록의 아무 것도 바꾸지 않고 요소를 목록에 삽입할 수도 있습니다. 예를 들어:

nums = [1, 2, 3, 4, 5]

nums[2:2] = [6, 7]    # [1, 2, 6, 7, 3, 4, 5]   (insert 2 elements)
nums[7:] = [8, 9]     # [1, 2, 6, 7, 3, 4, 5, 8, 9] (append 2 elements)
nums[:0] = [0]        # [0, 1, 2, 6, 7, 3, 4, 5, 8, 9] (prepend 1 element)
nums[:] = [ 4, 2]     # [4, 2]         (replace whole list with a new one)


단계 사용



마지막으로 step는 슬라이스 할당에도 적용할 수 있으며 각 스트라이드 후 반복과 일치하는 요소를 교체하는 데 사용할 수 있습니다. 유일한 차이점은 step1 가 아니면 삽입된 목록의 길이가 반환된 목록 조각의 길이와 정확히 같아야 한다는 것입니다. 예를 들어:

nums = [1, 2, 3, 4, 5]

nums[2:5:2] = [6, 7]  # [1, 2, 6, 4, 7] (replace every 2nd element, 2 through 5)
nums[2:5:2] = [6, 7, 8] # Throws a ValueError (can't replace 2 elements with 3)
nums[1::-1] = [9, 0]  # [0, 9, 6, 4, 7] (reverse replace, 1 through start)



짧은 고품질 코드 스니펫과 기사가 마음에 드십니까? 우리도 그래! 이와 같은 기사를 더 보려면 30 seconds of code을 방문하거나 매일 JavaScript, React 및 Python 스니펫을 보려면 팔로우하세요! 👨‍💻