Python

Python Slicing

Devwon99 2023. 11. 27. 01:35

Slicing


리스트에 대해 slice([])를 활용하면 일부 범위, 조건에 해당하는 원소들을 가져올 수 있습니다.

기본적인 형태는 다음과 같습니다.

arr[start:end:step]

for loop과 굉장히 유사하게 동작합니다.

start index에서 시작하여 end index 직전까지 step씩 뛰며 전진합니다.

index 0 1 2 3 4 =====================

arr = [1, 2, 3, 4, 5] print(arr[1:3:1]) # 1번째 index부터 3번째 index 전까지 1씩 증가

>> [2, 3]

step이 1인 경우에는 생략이 가능합니다.

index 0 1 2 3 4 =====================

arr = [1, 2, 3, 4, 5] print(arr[1:3]) # 1번째 index부터 3번째 index 전까지

>> [2, 3]

만약 첫 번째 index부터 slicing을 적용하고 싶다면, 첫 번째 start 값은 비워놔도 됩니다.

index  0  1  2  3  4
=====================
arr = [1, 2, 3, 4, 5]
print(arr[:3]) # 처음부터 3번째 index 전까지

>> [1, 2, 3]
 

만약 마지막 원소까지 slicing을 적용하고 싶다면, 두 번째 end 값은 비워놔도 됩니다.

index  0  1  2  3  4
=====================
arr = [1, 2, 3, 4, 5]
print(arr[2:]) # 2번째 index부터 끝까지

>> [3, 4, 5]
 

특정 구간의 원소들이 뒤집힌 형태로 리스트를 만들고 싶다면, for loop에서 처럼 step값에 -1을 넣어주면 됩니다.

index  0  1  2  3  4
=====================
arr = [1, 2, 3, 4, 5]
print(arr[3:0:-1]) # 3번째 index부터 0번째 index 전까지 -1씩 감소하면서

>> [4, 3, 2]
 

전체 원소를 뒤집고 싶다면, start, end를 모두 비우고 step에 -1만 적으면 됩니다.

index  0  1  2  3  4
=====================
arr = [1, 2, 3, 4, 5]
print(arr[::-1]) # 전체 원소 뒤집기

>> [5, 4, 3, 2, 1]
 

따라서 10개의 원소를 입력받아 뒤집는 문제는 다음과 같이 코드를 작성해볼 수도 있습니다.

python3 코드

arr = list(map(int, input().split()))
reversed_arr = arr[::-1]

for elem in reversed_arr:
    print(elem, end=" ")
 

출력결과

>> 1 2 4 2 5 7 8 5 8 3

3 8 5 8 7 5 2 4 2 1

 

● tuple


한 줄에 n, m 2개의 숫자를 공백을 사이에 두고 입력 받는 경우에는 tuple과 map을 이용해 볼 수 있습니다. tuple로 map 함수를 감싸면, n, m에 각 숫자를 나눠 할당해 줄 수 있습니다.

n, m = tuple(map(int, input().split()))

print(n, m)

>> 1 3

1