파이썬 시퀀스 자료형, 슬라이스 활용

Yeonu·2020년 11월 16일
0

Python 이론

목록 보기
4/30
post-thumbnail

시퀀스 자료형

리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형

특정 값이 있는지 확인하기

값 in 시퀀스객체
값 not in 시퀀스객체

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> 100 not in a
True
>>> 30 not in a
False

>>> 43 in (38, 76, 43, 62, 19)
True
>>> 1 in range(10)
True
>>> 'P' in 'Hello, Python'
True



시퀀스 객체 연결하기

연산자를 사용하여 객체를 서로 연결하여 새 객체를 만들 수 있다.
시퀀스객체1 + 시퀀스객체2

시퀀스 자료형 중에서 range는 + 연산자로 객체를 연결할 수 없다. range를 리스트나 튜플로 만들어 연결하면 된다.

>> list(range(0, 10)) + list(range(10, 20))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>> tuple(range(0, 10)) + tuple(range(10, 20))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

문자열은 문자열끼리 연결할 수 있다. 숫자와 연결 시 문자열로 형변환이 필요하다.

>> 'Hello, ' + str(10)      # str을 사용하여 정수를 문자열로 변환
'Hello, 10'
>> 'Hello, ' + str(1.5)     # str을 사용하여 실수를 문자열로 변환
'Hello, 1.5'



시퀀스 객체 반복하기 : * 연산자는 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 객체를 만든다(0 또는 음수를 곱하면 빈 객체가 나오며 실수는 곱할 수 없다).

>>> [0, 10, 20, 30] * 3
[0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30]

range는 +연산자와 마찬가지로 * 연산자를 이용해 반복할 수 없다. 리스트나 튜플로 만들어 반복하면 된다.

>> list(range(0, 5, 2)) * 3
[0, 2, 4, 0, 2, 4, 0, 2, 4]
>> tuple(range(0, 5, 2)) * 3
(0, 2, 4, 0, 2, 4, 0, 2, 4)



리스트와 튜플 요소 개수 구하기

len(시퀀스객체)

range의 숫자 생성 개수도 구할 수 있다.

>> len(range(0, 10, 2))
5

문자열의 길이도 구할 수 있다. (공백 포함)

>> hello = 'Hello, world!'
>> len(hello)
13



인덱스 사용하기

시퀀스객체[인덱스]

range, 튜플, 리스트, 문자열 시퀀스 객체 모두 인덱스로 접근 가능하다. 다음은 range의 요소 접근 방법이다.

>> r = range(0, 10, 2)
>> r[2]        # range의 세 번째(인덱스 2) 요소 출력
4

__getitem__ 메서드로 요소 호출 가능

>> a = [38, 21, 53, 62, 19]
>> a.__getitem__(1)
21



음수 인덱스 지정하기

>>> a = [38, 21, 53, 62, 19]
>>> a[-1]   # 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
>>> a[-5]   # 리스트의 뒤에서 다섯 번째(인덱스 -5) 요소 출력
38

마지막 인덱스에 접근하기.
1. -1로 마지막 인덱스를 구한다.
2. len()으로 시퀀스 객체의 길이를 구한 후 -1로 마지막 인덱스를 구한다. ex) a[len(a)-1]



요소에 값 할당하고 삭제하기

리스트만 가능하다. 튜플, range, 문자열은 값 할당,삭제 불가

할당

>>> a = [0, 0, 0, 0, 0]    # 0이 5개 들어있는 리스트
>>> a[0] = 38
>>> a[1] = 21
>>> a[2] = 53
>>> a[3] = 62
>>> a[4] = 19
>>> a
[38, 21, 53, 62, 19]
>>> a[0]
38
>>> a[4]
19

삭제
del 시퀀스객체[인덱스]

>>> a = [38, 21, 53, 62, 19]
>>> del a[2]
>>> a
[38, 21, 62, 19]



슬라이스 사용하기

시퀀스객체[시작인덱스:끝인덱스]

 >>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
 >>> a[0:4]     # 인덱스 0부터 3까지 잘라서 새 리스트를 만듦
 [0, 10, 20, 30] # 끝인덱스 -1 까지 가져옴

시작인덱스, 끝인덱스 모두 생략 가능. 생략 시 처음 값, 마지막 값으로 할당된다.



음수로 인덱스 지정하기

>>> a[4:-1]    # 인덱스 4부터 -2까지 요소 5개를 가져옴
[40, 50, 60, 70, 80]



인덱스 증가폭 사용하기

시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:8:3]    # 인덱스 2부터 3씩 증가시키면서 인덱스 7까지 가져옴
[20, 50]



len으로 리스트 전체 가져오기

>>> a[:len(a)]  #시작 인덱스 생략, 끝 인덱스에 len(a) 지정하여 리스트 전체를 가져옴
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]



슬라이스에 요소 할당하기

시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5] = ['a', 'b', 'c']    # 인덱스 2부터 4까지 값 할당
>>> a
[0, 10, 'a', 'b', 'c', 50, 60, 70, 80, 90]

요소 개수를 맞추지 않아도 된다. 할당할 요소 개수가 적으면 그만큼 리스트의 요소 개수도 줄어들고 요소 개수가 많으면 리스트 요소도 늘어난다.

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5] = ['a']    # 인덱스 2부터 4까지에 값 1개를 할당하여 요소의 개수가 줄어듦
>>> a
[0, 10, 'a', 50, 60, 70, 80, 90]

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5] = ['a', 'b', 'c', 'd', 'e'] # 인덱스 2부터 4까지 값 5개를 할당하여 요소의 개수가 늘어남
>>> a
[0, 10, 'a', 'b', 'c', 'd', 'e', 50, 60, 70, 80, 90]

단 인덱스 증가폭을 지정했을 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 일치해야 한다.


del로 슬라이스 삭제하기

del 시퀀스객체[시작인덱스:끝인덱스]

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:8:2]    # 인덱스 2부터 2씩 증가시키면서 인덱스 6까지 삭제
>>> a
[0, 10, 30, 50, 70, 80, 90]



튜플, range, 문자열에 슬라이스 사용하기

방법은 리스트와 동일하나, 슬라이스에 요소 할당, 삭제만 불가

0개의 댓글