Python Slicing
● 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 3