list
, tuple
, range
, str
처럼 값이 연속적으로 이어진 자료형tuple
, range
, str
은 읽기전용이다.in
, not in
# 값이 있는지 in 으로 확인
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> 30 in a
True
# 값이 없는지 not in 으로 확인
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> 30 not in a
False
# 리스트, 튜플, range, 문자열에서 확인
>>> 1 in range(10)
True
>>> 'P' in 'Hello, Python'
True
+
연산자 사용, range
는 불가# 리스트끼리, 튜플끼리, 문자열끼리 연결
>>> a = [0, 10, 20, 30]
>>> b = [9, 8, 7, 6]
>>> a + b
[0, 10, 20, 30, 9, 8, 7, 6]
>>> 'Hello, ' + 'world!'
'Hello, world!'
# 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]
# 문자열과 숫자 연결하기
>>> 'Hello, ' + str(10) # str을 사용하여 정수를 문자열로 변환
'Hello, 10'
>>> 'Hello, ' + str(1.5) # str을 사용하여 실수를 문자열로 변환
'Hello, 1.5'
*
연산자와 정수만 사용, range
는 불가# 정수를 곱해서 반복하기
>>> [0, 10, 20, 30] * 3
[0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30]
>>> 'Hello, ' * 3
'Hello, Hello, Hello, '
# 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()
함수 사용# 리스트와 튜플
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> len(a)
10
>>> b = (38, 76, 43, 62, 19)
>>> len(b)
5
# range의 생성 개수 구하기
>>> len(range(0, 10, 2))
5
# 문자의 개수 구하기 (파이썬3)
>>> hello = 'Hello, world!'
>>> len(hello)
13
시퀀스객체[인덱스]
시퀀스객체.__getitem__()
메서드와 같다.
# 리스트, 튜플, 문자열, range
>>> r = range(0, 10, 2)
>>> r[2] # range의 세 번째(인덱스 2) 요소 출력
2
>>> a = [38, 21, 53, 62, 19]
>>> a.__getitem__(1)
21
# 음수 인덱스
>>> b = (38, 21, 53, 62, 19)
>>> b[-1] # 튜플의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
# 범위를 벗어난 인덱스
IndexError
# 마지막 요소에 접근하기 (len 함수 활용)
>>> a = [38, 21, 53, 62, 19]
>>> a[len(a) - 1] # 마지막 요소(인덱스 4) 출력
19
list
만 가능하다# list의 요소 할당하기
>>> a = [1, 2, 3]
>>> a[0] = 3
>>> a
[3, 2, 3]
# list의 요소 삭제하기
>>> a = [1, 2, 3]
>>> del a[0]
>>> a
[2, 3]
# 범위를 벗어난 인덱스는 불가하다.
IndexError
# tuple, range, str은 불가하다.
TypeError
slice
)시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]
# 시퀀스객체[시작인덱스:끝인덱스]
# 끝인덱스-1 까지 가져온다.
>>> a = [0, 10, 20, 30, 40]
>>> a[1:4] # 인덱스 0부터 3까지 잘라서 새 리스트를 만듦
[10, 20, 30]
# 인덱스 건너뛰며 가져오기
# 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:9:3] # 인덱스 2부터 3씩 증가시키면서 인덱스 8까지 가져옴
[20, 50, 80]
# 인덱스를 생략해서 처음과 끝 지정하기
# 시퀀스객체[:끝인덱스] or 시퀀스객체[시작인덱스:]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[:7] # 리스트 처음부터 인덱스 6까지 가져옴
[0, 10, 20, 30, 40, 50, 60]
# 인덱스 생략하고 증가폭 지정하기
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[::2] # 리스트 전체에서 인덱스 0부터 2씩 증가시키면서 요소를 가져옴
[0, 20, 40, 60, 80]
# 시퀀스 객체를 뒤집기 ( 음수 증가폭 사용 )
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[::-1]
[90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
# 요소를 뒤에서부터 가져오기 ( 음수 증가폭 사용 )
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[5:1:-1]
[50, 40, 30, 20]
# len 사용해 전체를 가져오기
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[:len(a)] # 시작 인덱스 생략, 끝 인덱스에 len(a) 지정하여 리스트 전체를 가져옴
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
# 튜플도 사용 방법 동일
# 문자열도 사용 방법 동일
range
잘라내기range
에 사용하면 또다른 range
객체를 만든다.>>> r = range(10)
>>> r
range(0, 10)
>>> r[4:7] # 인덱스 4부터 6까지 숫자 3개를 생성하는 range 객체를 만듦
range(4, 7)
>>> r[4:] # 인덱스 4부터 9까지 숫자 6개를 생성하는 range 객체를 만듦
range(4, 10)
>>> r[:7:2] # 인덱스 0부터 2씩 증가시키면서 인덱스 6까지 숫자 4개를 생성하는 range 객체를 만듦
range(0, 7, 2)
slice
객체로 시퀀스 객체 잘라내기 슬라이스객체 = slice(끝인덱스)
슬라이스객체 = slice(시작인덱스, 끝인덱스)
슬라이스객체 = slice(시작인덱스, 끝인덱스, 인덱스증가폭)
시퀀스객체[슬라이스객체]
시퀀스객체.__getitem__(슬라이스객체)
# slice 객체를 넣어 잘라내기
>>> range(10)[slice(4, 7, 2)]
range(4, 7, 2)
>>> range(10).__getitem__(slice(4, 7, 2))
range(4, 7, 2)
# 하나의 slice 객체를 만들어 여러 시퀀스 객체에 사용하기
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> s = slice(4, 7) # 인덱스 4부터 6까지 자르는 slice 객체 s 생성
>>> a[s]
[40, 50, 60]
>>> r = range(10)
>>> r[s]
range(4, 7)
>>> hello = 'Hello, world!'
>>> hello[s]
'o, '
# 슬라이스 범위와 할당 값의 개수가 같을 때
>>> 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:8:2] = ['a', 'b', 'c'] # 인덱스 2부터 2씩 증가시키면서 인덱스 7까지 값 할당
>>> a
[0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90]
# 건너뛰면서 삭제하기
>>> 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]
x = input().split() # 입력값을 요소로 하는 리스트 만들어서
# 입력 1 2 3 4 5 6 7 8 9 10
del x[len(x)-1:len(x)-6:-1] # 음수 증가폭으로 뒤부터 요소를 선택
print(x)
# 결과 ['1', '2', '3', '4', '5']
x = input()
y = input()
# 입력 python -> 홀수 인덱스 가져오기
# 입력 python -> 짝수 인덱스 가져오기
print(x[1::2]+y[0::2])
# yhnpto
딕셔너리 = { 키1 : 값1, 키2 : 값2 }
# 다양한 자료형으로 만든 키 (정수, 실수, 불)
>>> x = {100: 'hundred', False: 0, 3.5: [3.5, 3.5]}
>>> x
{100: 'hundred', False: 0, 3.5: [3.5, 3.5]}
# 빈 딕셔너리 만들기
>>> x = {}
>>> x
{}
>>> y = dict()
>>> y
{}
dict
로 딕셔너리 만들기딕셔너리 = dict( 키1 = 값1, 키2 = 값2 )
딕셔너리 = dict( zip ([키1, 키2], [값1, 값2]) )
딕셔너리 = dict( [ (키1, 값1), (키2, 값2) ] )
딕셔너리 = dict( {키1: 값1, 키2: 값2} )
# 키 = 값 형식으로 만들기 (키에 따옴표 붙이지 않는다.)
>>> lux1 = dict(health=490, mana=334, melee=550, armor=18.72)
>>> lux1
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
# zip 함수로 키 리스트와 값 리스트를 묶기
>>> lux2 = dict(zip(['health', 'mana', 'melee', 'armor'], [490, 334, 550, 18.72]))
>>> lux2
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
# 리스트 안에 (키, 값) 형식의 튜플 나열하기
>>> lux3 = dict([('health', 490), ('mana', 334), ('melee', 550), ('armor', 18.72)])
>>> lux3
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
# dict 안에서 중괄호로 만들기
>>> lux4 = dict({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})
>>> lux4
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
딕셔너리[키]
# 키를 통해 값에 접근하기
>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health']
490
# 키를 통해 값을 할당하기
>>> lux = {'health': 490, 'mana': 1184, 'melee': 550, 'armor': 18.72}
>>> lux['health'] = 2037 # 키 'health'의 값을 2037로 변경
>>> lux
{'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72}
# 키를 추가하고 값을 할당하기
>>> lux = {'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72}
>>> lux['mana_regen'] = 3.28 # 키 'mana_regen'을 추가하고 값 3.28 할당
>>> lux
{'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72, 'mana_regen': 3.28}
# 없는 키를 가져오려하면 에러
in
, not in
# in 으로 키가 있는지 확인하기
>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> 'health' in lux
True
# not in 으로 키가 없는지 확인하기
>>> 'health' not in lux
False
키의 개수는 값의 개수와 같다.
len()
함수 사용
# 키의 개수가 곧 값의 개수이다.
>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> len(lux)
4
>>> len({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})
4
x = input().split() # 문자열 요소 리스트로 만들기
y = map(float, input().split()) # 요소를 실수로 바꾼 리스트로 만들기
# 입력 health health_regen mana mana_regen
# 입력 575.6 1.7 338.8 1.63
z = dict(zip(x,y)) # zip 함수 안에 키와 값 리스트 넣기
print(z)
{'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}