개발하고 싶어요
시퀀스 자료형, 인덱스 본문
In [1]:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity="all"
import warnings
warnings.filterwarnings('ignore')
시퀀스 자료형 확인하기¶
시퀀스 자료형¶
- list, tuple, range, str을 주로 사용
특정 값이 있는지¶
- 값 in 시퀀스 객체
- 값 not in 시퀀스 객체
In [3]:
a = [0, 10, 20, 30]
10 in a
40 in a
Out[3]:
True
Out[3]:
False
In [4]:
a = [0, 10, 20, 30]
10 not in a
60 not in a
Out[4]:
False
Out[4]:
True
리스트 외 튜플, range, 문자열에서도 사용
In [7]:
43 in (10, 20, 30)
1 in range(3)
'H' in 'hello'
Out[7]:
False
Out[7]:
True
Out[7]:
False
시퀀스 객체 연결¶
- 시퀀스 객체 + 시퀀스 객체
In [8]:
a = [0, 10, 20]
b = [30, 40, 50]
a + b
Out[8]:
[0, 10, 20, 30, 40, 50]
In [9]:
range(10) + range(10, 20) # range는 오류
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[9], line 1
----> 1 range(10) + range(10, 20)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
=> range는 리스트나 튜플로 변경하여 사용
In [11]:
list(range(10)) + list(range(10, 20))
tuple(range(10)) + tuple(range(10, 20))
Out[11]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Out[11]:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
In [12]:
'hello' + 'python'
Out[12]:
'hellopython'
시퀀스 객체 반복¶
- 시퀀스 객체 * 상수
- 정수 * 시퀀스 객체
In [13]:
a = [10, 20, 30]
a * 2
Out[13]:
[10, 20, 30, 10, 20, 30]
In [14]:
a = range(1, 5)
list(a) * 2
Out[14]:
[1, 2, 3, 4, 1, 2, 3, 4]
In [15]:
2 * 'hello'
Out[15]:
'hellohello'
시퀀스 객체의 요소 개수 구하기¶
- len(시퀀스 객체)
리스트와 튜플의 요소 개수 구하기
In [16]:
a = [10, 20, 30]
len(a)
b = (10, 20, 30)
len(b)
Out[16]:
3
Out[16]:
3
range의 숫자 생성 개수 구하기
In [17]:
len(range(0, 100, 10))
Out[17]:
10
문자열릐 길이 구하기 => 빈칸도 문자열 길이에 포함
In [18]:
s = 'hello python'
len(s)
Out[18]:
12
인덱스 사용¶
- 시퀀스 객체[인덱스]
- 시퀀스 객체의 인덱스는 항상 0부터 시작
리스트
In [20]:
a = [10, 20, 30, 40]
a[0]
a[3]
a[0] + a[2] # 10 + 30
Out[20]:
10
Out[20]:
40
Out[20]:
40
튜플
In [21]:
a = (10, 20, 30, 40)
a[0]
a[3]
a[0] + a[2] # 10 + 30
Out[21]:
10
Out[21]:
40
Out[21]:
40
range
In [22]:
r = range(0, 10, 2)
r
r[0]
r[4]
Out[22]:
range(0, 10, 2)
Out[22]:
0
Out[22]:
8
문자열
In [23]:
s = 'hello, world'
s[0]
s[5]
s[6] # 공백 출력
Out[23]:
'h'
Out[23]:
','
Out[23]:
' '
음수 인덱스 사용
리스트
In [25]:
a = [10, 20, 30]
a[-1]
a[-2]
Out[25]:
30
Out[25]:
20
튜플
In [26]:
a = (10, 20, 30)
a[-1]
a[-2]
Out[26]:
30
Out[26]:
20
range
In [27]:
r = range(0, 10, 2)
r
r[-1]
r[-3]
Out[27]:
range(0, 10, 2)
Out[27]:
8
Out[27]:
4
문자열
In [28]:
s = 'hello world!'
s[-1]
s[-8]
Out[28]:
'!'
Out[28]:
'o'
요소에 값 할당¶
- 시퀀스 객체[인덱스] = 값
- 튜플, range, 문자열은 안에 지정된 값을 변경할 수 없다
In [29]:
a = [0, 0, 0, 0, 0]
a
Out[29]:
[0, 0, 0, 0, 0]
In [30]:
a[0] = 10
a
Out[30]:
[10, 0, 0, 0, 0]
In [32]:
a[1] = 20
a[2] = 30
a[4] = 40
a
Out[32]:
[10, 20, 30, 0, 40]
del로 요소 삭제¶
- del 시퀀스 객체[인덱스]
- 튜플, range, 문자열은 안에 저장된 요소의 값을 삭제할 수 없다
- del을 사용하면 시퀀스 자체가 변경
In [33]:
a = [10, 20, 30, 40, 50]
a
Out[33]:
[10, 20, 30, 40, 50]
In [34]:
del a[0]
a
Out[34]:
[20, 30, 40, 50]
In [35]:
del a[-1]
a
Out[35]:
[20, 30, 40]
슬라이스 사용하기¶
- 시퀀스 객체[시작 인덱스 : 끝 인덱스 : step 인덱스]
리스트
In [37]:
a = [10, 20, 30, 40, 50]
a
a[1:1] # a의 1번째 인덱스부터 0번째 인덱스까지 => 없음
a[0:10] # a의 0번째 인덱스부터 9번째 인덱스까지
a[3:-1] # a의 3번째 인덱스부터 -1인덱스까지
a[10:0:-1] # a를 반대로
Out[37]:
[10, 20, 30, 40, 50]
Out[37]:
[]
Out[37]:
[10, 20, 30, 40, 50]
Out[37]:
[40]
Out[37]:
[50, 40, 30, 20]
튜플
In [41]:
a = tuple((10, 20, 30, 40, 50))
a
a[1:1] # a의 1번째 인덱스부터 0번째 인덱스까지 => 없음
a[0:10] # a의 0번째 인덱스부터 9번째 인덱스까지
a[3:-1] # a의 3번째 인덱스부터 -1인덱스까지
a[10:0:-1] # a를 반대로
Out[41]:
(10, 20, 30, 40, 50)
Out[41]:
()
Out[41]:
(10, 20, 30, 40, 50)
Out[41]:
(40,)
Out[41]:
(50, 40, 30, 20)
문자열
In [42]:
s = 'hello, python'
s[2:5]
s[5:]
Out[42]:
'llo'
Out[42]:
', python'
요소에 값 할당¶
- 시퀀스 객체[시작 인덱스 : 끝 인덱스] = 시퀀스 객체
In [43]:
a = list(range(0, 100, 10))
a
Out[43]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
In [45]:
a[2:5] = ['a', 'b,', 'c']
a
Out[45]:
[0, 10, 'a', 'b,', 'c', 50, 60, 70, 80, 90]
할당할 요소 개수가 적으면 그 만큼 리스트의 요소 개수도 줄어듬
In [46]:
a = list(range(0, 100, 10))
a
a[2:5] = ['a']
a
Out[46]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
Out[46]:
[0, 10, 'a', 50, 60, 70, 80, 90]
할당할 요소 개수가 많으면 그 만큼 리스트의 요소 개수도 늘어남
In [47]:
a = list(range(0, 100, 10))
a
a[2:5] = ['a' ,'b', 'c', 'd', 'e', 'f']
a
Out[47]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
Out[47]:
[0, 10, 'a', 'b', 'c', 'd', 'e', 'f', 50, 60, 70, 80, 90]
step 인덱스를 지정했을 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 같아야 한다
In [48]:
a = list(range(0, 100, 10))
a
a[2:8:2] = ['a' ,'b', 'c']
a
Out[48]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
Out[48]:
[0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90]
del로 슬라이스 삭제하기¶
- 튜플, range, 문자열은 사용 못 한다
- del을 사용할 경우 시퀀스 자체가 변경
In [49]:
a = list(range(0, 100, 10))
a
Out[49]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
In [50]:
del a[2:4]
a
Out[50]:
[0, 10, 40, 50, 60, 70, 80, 90]
인덱스 생략하기¶
- 시퀀스 객체[:끝 인덱스] : 처음부터 끝 인덱스 -1까지
- 시퀀스 객체[시작 인덱스 :] : 시작 인덱스부터 끝까지
- 시퀀스 객체[:] : 처음부터 끝까지
- 시퀀스 객체[:끝인덱스:step인덱스] : 처음부터 끝 인덱스 - 1까지 step 폭 만큼
- 시퀀스 객체[시작 인덱스 ::증가폭] : 처음부터 끝까지 step 폭 만큼
- 시퀀스 객체[::step 인덱스] : 처음부터 끝까지 step 폭 만큼
In [51]:
a= list(range(0, 100, 10))
a[:5] # 처음부터 5-1번째까지
a[2:] # 두 번째부터 끝까지
a[:] # 리스트 전체
a[:8:2] # 처음부터 8-1번째까지 2칸씩
a[2::2] # 두 번째부터 끝까지 2칸씩
a[::2] # 처음부터 끝까지 2칸씩
Out[51]:
[0, 10, 20, 30, 40]
Out[51]:
[20, 30, 40, 50, 60, 70, 80, 90]
Out[51]:
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
Out[51]:
[0, 20, 40, 60]
Out[51]:
[20, 40, 60, 80]
Out[51]:
[0, 20, 40, 60, 80]
step 인덱스를 음수로
In [53]:
a = list(range(0, 100, 10))
a[5:1:-1] # 다섯 번째부터 두 번째까지 -1씩(뒤집어서)
a[-1:-6:-2]
a[::-1] # 처음부터 끝까지 뒤집어서
Out[53]:
[50, 40, 30, 20]
Out[53]:
[90, 70, 50]
Out[53]:
[90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
'PYTHON' 카테고리의 다른 글
| if문, else문, elif문 (0) | 2023.12.23 |
|---|---|
| 딕셔너리 (1) | 2023.12.23 |
| 리스트, 튜플 (0) | 2023.12.23 |
| 입력 사용하기 (0) | 2023.12.23 |
| 데이터 로딩과 저장, 파일 형식 (2) | 2023.12.22 |