Python - List Slicing

황인용·2019년 12월 11일
0

Python

목록 보기
18/44

List Slicing

파이썬에서는 리스트의 일부분을 copy할 수 있다. 이것을 slicing 이라고 한다
마치 피자 한판에서 한 조각씩 slice라고 하듯이 리스트의 부분들을 복사하는 기능이다.

만약 BTS의 멤버(7명)으로 리스트를 만든다면

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]

여기서 2번째 요소(element)부터 4번째 요소까지만 copy해서 sub_bts라는 리스트를 만들고자 한다면...

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]
sub_bts = bts[1:4]
## ==> ['제이홉', '진', '정국'

Slice 문법

list_name[start : stop]
  1. 먼저 list 이름이 위치
  2. 그 다음 중괄호 ([ )가 열림
  3. 부분적인 리스트가 시작할 첫번째 요소(포함)의 인덱스 번호가 나옴
  4. : 으로 나눠주고
  5. 부분적인 리스트가 멈추는 요소(비포함)의 인덱스 번호가 나옴
  6. 중괄호 (])으로 닫아 줌.

image.png

Slicing Steps

slice에서 steps은 그 값만큼 건너뛰어 가져오는 기능이다

slice step

list_name[start : stop : step]

예를들어 bts[1:4:2]를 선언하면,

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]
sub_bts = bts[1:4:2]
## ==> ['제이홉',, '정국']

image.png

step은 optional이기때문에 선언해주지 ㅇ낳아도 된다. 선언하지 않으면 default로 1값이 들어가기 때문이다.

Slicing Tip

list를 slicing 할때 start index를 빈칸으로 남겨둔다면...
index값을 0으로 생각하고 sclicing한다

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]
sub_bts = bts[:4]
## ==> ['RM', '제이홉', '진', '정국']

반대로 stop index를 빈칸으로 남겨두면...
start index부터 list의 끝까지 가져온다

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]
sub_bts = bts[2:]
## ==> ['진', '정국', '지민', '뷔', '슈가']

Copying. Not Modifying.

slicing은 ㅇ리지널 list를 수정하는것이 아니라 새로운 list를 만들어 내는것이다 즉, 일부를 잘라 copy를 해서 만들어낸다

bts = ["RM", "제이홉", "진", "정국", "지민", "뷔", "슈가"]
sub_bts = bts[1:4]

print(f"bts = {bts}")
> bts = ['RM', '제이홉', '진', '정국', '지민', '뷔', '슈가']
print(f"sub_bts = {sub_bts}")
> sub_bts = ['제이홉', '진', '정국']

Assignment

Input으로 주어진 리스트를 slicing 하여 다음 3종류의 sub list를 출력하세요.

리스트의 처음부터 중간까지.
리스트의 중간부터 끝까지.
리스트의 2번째 요소부터 5번째 요소까지 (5번째 요소 포함해서).

예를 들어, 다음과 같은 리스트가 input으로 들어왔다면:

my_list = [1, 2, 3, 4, 5, 6, 7, 8]

다음과 같이 출력되어야 합니다.

[1, 2, 3, 4][5, 6, 7, 8]
[2, 3, 4, 5]

my_list = [s for s in input().split()]
sub_list1 = my_list[:int(len(my_list)/2)]
sub_list2 = my_list[int(len(my_list)/2):len(my_list)]
sub_list3 = my_list[1:5]
print(sub_list1)
print(sub_list2)
print(sub_list3)
## Model Solution
my_list = [s for s in input().split()]

print(my_list[:len(my_list)//2])
print(my_list[len(my_list)//2:])
print(my_list[2:5])
profile
dev_pang의 pang.log

0개의 댓글