여러 개의 값들을 모아서 관리하는 데이터 타입.
파이썬은 데이터를 모으는 방식에 따라 다음과 같이 4개의 타입을 제공한다.
[값, 값, 값, ..]
ages = [10, 20, 30, 11, 23, 32] ages[10, 20, 30, 11, 23, 32]
names = ["이순신", "홍길동", "유관순", "강감찬"] names['이순신', '홍길동', '유관순', '강감찬']
person_info = ["홍길동", 20, "서울", 182.1, True] person_info['홍길동', 20, '서울', 182.1, True]
ages[10, 20, 30, 11, 23, 32]
print(ages[0], ages[-6]) # 양수, 음수 index print(ages[0], ages[3])10 10
10 11ages[0] = 50 # 변경 ages[50, 20, 30, 11, 23, 32]
ages[1:5][20, 30, 11, 23]
ages[:5] # 시작 index 생략 -> 처음부터[50, 20, 30, 11, 23]
ages[-3:] #종료 index 생략 -> 끝까지[11, 23, 32]
ages[::2] # 범위 : 처음 ~ 끝, 간격 : 2[50, 30, 23]
ages[::-1][32, 23, 11, 30, 20, 50]
ages[1:4] = 100, 200, 300 ages[50, 100, 200, 300, 23, 32]
리스트 + 리스트
l1 = [1, 2, 3, 4] l2 = [10, 20, 30, 40] l3 = l1 + l2 + ages l3[1, 2, 3, 4, 10, 20, 30, 40, 50, 100, 200, 300, 23, 32]
l4 = l1 * 3 l4[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
30 in ages # ages의 원소 중에 30이 있는지False
len(l3)14
scores = [ [100, 50, 70], [70, 100, 90], [100, 40, 80] ] scores[0][1]50
scores[1][1] = 70 scores[[100, 50, 70], [70, 70, 90], [100, 40, 80]]
append(value) : value를 추가한다.
extend(List) : List의 원소들을 추가한다.
sort([reverse=False]) : 원소들을 오름차순 정렬한다. reverse=True로 하면 내림차순정렬 한다.
insert(index, 삽입할값) : 지정한 index에 '삽입할값'을 삽입한다.
remove(삭제할값) : '삭제할값' 값과 같은 원소를 삭제한다.
index(찾을값[, 시작index]) : '찾을값'의 index를 반환한다.
pop([index]) : index의 값을 반환하면서 삭제한다. index 생략하면 가장 마지막 값을 반환하며 삭제한다.
count(값) : '값'이 리스트의 원소로 몇개 있는지 반환한다.
clear() : 리스트 안의 모든 원소들을 삭제한다.
ages[50, 100, 200, 300, 23, 32]
ages.append(45) ages.append(22) ages[50, 100, 200, 300, 23, 32, 45, 22]
ages.extend([1, 2, 3, 4]) # 여러 개 추가할 때 ages[50, 100, 200, 300, 23, 32, 45, 22, 1, 2, 3, 4]
ages.sort() # 오름차순으로 정렬 ages[1, 2, 3, 4, 22, 23, 32, 45, 50, 100, 200, 300]
ages.sort(reverse = True) # 내림차순 정렬 ages[300, 200, 100, 50, 45, 32, 23, 22, 4, 3, 2, 1]
sorted(ages) # 리스트.sort() : 리스트 자체를 변경(정렬) # sorted(자료구조) : 정렬한 결과를 새로운 리스트로 반환[1, 2, 3, 4, 22, 23, 32, 45, 50, 100, 200, 300]
#삭제 ages.remove(300) # remove(삭제할 값) ages[200, 100, 50, 45, 32, 23, 22, 4, 3, 2, 1]
ages.pop(1)50
v = ages.pop(-1) ages[200, 45, 32, 23, 22, 4, 3]
v2
ages.clear() ages[]
ages.extend([1, 2, 3, 1, 2, 3]) ages[1, 2, 3, 1, 2, 3]
#조회 ages.index(2) # 원소 2의 index를 반환1
ages.index(2,3) # 원소 2를 찾는데 index 3에서부터 찾아라4
ages.count(1)2
t1 = (1, 10, 5, 70) t1(1, 10, 5, 70)
t2 = 1, 2, 3, 10, 20, 100, 5, 17, 20 # 튜플은 괄호를 생략할 수 있다 t2(1, 2, 3, 10, 20, 100, 5, 17, 20)
t3 = 10, # 값 뒤에 ','를 붙이면 원소가 한 개인 튜플 t3(10,)
t4 = ("홍길동",) # 쉼표를 안 붙히면 그냥 문자열로 인식 t4('홍길동',)
t2[1], t2[-1], t2[5](2, 20, 100)
t2[2: 7: 2](3, 20, 5)
t2[:7](1, 2, 3, 10, 20, 100, 5)
t2[:5](1, 2, 3, 10, 20)
t2[::-1](20, 17, 5, 100, 20, 10, 3, 2, 1)
t1[0] = 20 # 변경할 수 없다.TypeError Traceback (most recent call last)
Cell In[12], line 1
----> 1 t1[0] = 20
TypeError: 'tuple' object does not support item assignment
tuple + tuple
index(찾을값 [, 시작index]) : '찾을값'이 몇번 index인지 반환한다.
count(값) : 원소로 '값'이 몇개 있는지 반환한다.
값을 키(key)-값(value) 쌍으로 묶어서 저장하는 자료구조이다.
구문
1. { 키 : 값, 키 : 값, 키 : 값 }
2. dict(key=value, key=value) 함수 이용
# 사과: 10, 귤: 20, 수박: 5 # l = [10, 20, 5] # l[0] f1 = {"사과":10, "귤":20, "수박": 5} f1{'사과': 10, '귤': 20, '수박': 5}
f2 = dict(사과=10, 귤=20, 수박=5) f2{'사과': 10, '귤': 20, '수박': 5}
조회: index에 key값을 식별자로 지정한다.
f1['사과'] f1['수박']5
f1['복숭아'] # 없는 것 조회시 KeyError
KeyError Traceback (most recent call last)
Cell In[23], line 1
----> 1 f1['복숭아']
KeyError: '복숭아'#변경 - 있는 key에 대입 f1['사과'] = 50 f1{'사과': 50, '귤': 20, '수박': 5}
#추가 - 없는 key 에 대입 f1['복숭아'] = 100 f1{'사과': 50, '귤': 20, '수박': 5, '복숭아': 100}
in, not in 연산자
len(dictionary)
get(key[, 기본값]) : key의 item의 값을 반환한다. 단 key가 없을 경우 None또는 기본값을 반환한다.
pop(key) : key의 item의 값을 반환하면서 dictionary에서 삭제한다. 없는 key일 경우 KeyError발생
clear() : dictionary의 모든 item들을 삭제한다.
del dict[key] : key의 item을 제거한다.
items() : item의 key, value를 튜플로 묶어 모아 반환한다.
keys() : key값들만 모아 반환한다.
values() : value값들만 모아 반환한다.
f1['사과'], f1.get("사과")(50, 50)
# f1['딸기'] #없는 key 조회 -> 에러 f1.get("딸기") # 없는 key 조회 -> default 값을 반환(None) f1.get("딸기", "없음") # (key, 없으면반환할값)'없음'
v = f1.pop("귤") # 삭제하면서 value를 반환. v20
f1{'수박': 5, '복숭아': 100}
v = f1.items() v # [ (key, value), (key, value) ]dict_items([('수박', 5), ('복숭아', 100)])
v = list(v) v[1]('복숭아', 100)
keys = f1.keys() # key값들만 모아서 반환 keysdict_keys(['수박', '복숭아'])
values = f1.values() # value 들만 모아서 반환 valuesdict_values([5, 100])
Set은 중복되는 값을 허용하지 않고 순서를 신경 쓰지 않는다.
구문
빈 Dictionary 만들기
s1 = {1, 2, 3, 4, 5, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 1, 3, } s1{1, 2, 3, 4, 5}
info = {} #dict type(info) # type(값) : 값의 data type을 알려준다.dict
in, not in 연산자
add(값) 집합에 값 추가
update(자료구조) 자료구조내의 원소들을 모두 집합에 추가
pop() 원소를 반환하고 Set에서 삭제한다.
remove(값) 값을 찾아서 Set에서 삭제한다.
합집합
교집합
차집합
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8, 9} s1 | s2 s1.union(s2) s1 & s2 s1.intersection(s2) s1 - s2 s1.difference(s2){1, 2, 3, 4, 5, 6, 7, 8, 9}
{4, 5}
{1, 2, 3}
list(자료구조)
l = [1, 2, 3, 1, 2, 3, 1, 2, 3] t = tuple(l) print(t) type(l), type(t)(1, 2, 3, 1, 2, 3, 1, 2, 3)
(list, tuple)s = set(l) s, type(s)({1, 2, 3}, set)
s2 = set(t) s2{1, 2, 3}
d = {"name":"이순신", "age":20, "address":"서울"} list(d) tuple(d) set(d){'address', 'age', 'name'}
list("abcdefghij")['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
d = list("월화수목금토일") d[3]+"요일"'목요일'
# 문제 1 ~ 7 jumsu = [100, 90, 100, 80, 70, 100, 80, 90, 95, 85] # 위 리스트는 학생번호 1번 ~ 10번까지 10명의 시험 점수이다. #(1) 7번의 점수를 출력하세요 jumsu[6]80
#(2) 1번부터 5번까지의 점수를 출력하세요. jumsu[:5][100, 90, 100, 80, 70]
#(3) 4, 5, 6, 7번의 점수를 출력하세요. jumsu[3:7][80, 70, 100, 80]
jumsu[100, 90, 100, 80, 70, 100, 80, 90, 95, 85]
#(4) 짝수번째 점수를 출력하세요. jumsu[1::2][90, 80, 100, 90, 85]
#(5) 홀수번째 점수를 출력하세요. jumsu[::2][100, 100, 70, 80, 95]
#(6) 9번의 점수를 20으로 변경하고 전체 출력하세요. print(jumsu) jumsu[8] = 20 print(jumsu)[100, 90, 100, 80, 70, 100, 80, 90, 95, 85][100, 90, 100, 80, 70, 100, 80, 90, 20, 85]
#(7) 중복된 점수는 제거하고 하나씩만 나오도록 출력하세요. list(set(jumsu))[100, 70, 80, 20, 85, 90]
# 문제 8 ~ 9 fruits = ["복숭아", "수박", "딸기"] #(8) fruits 리스트에 마지막 원소로 "사과", "귤"을 추가하세요. # fruits.append("사과") # fruits.append("귤") fruits.extend(["사과", "귤"]) fruits['복숭아', '수박', '딸기', '사과', '귤']
#(9) fruits 리스트에서 "복숭아"를 제거하세요. i = fruits.index("복숭아") fruits.pop(i) #del fruits[i] fruits['수박', '딸기', '사과', '귤']
#문제 10 ~ 15 #(10)본인의 이름, 나이, email주소, 취미, 결혼유무를 사전(딕셔너리)으로 생성. #취미는 2개 이상의 값을 넣는다.. info = { "이름":"홍길동", "나이":20, "email주소":"honggd@a.com", "취미":["독서", "영화감상", "게임"], "결혼여부":False } #(11) 위 딕셔너리에서 이름과 email주소를 조회해서 출력하세요. print(f"이름: {info['이름']}\nEmail주소: {info['email주소']}")이름: 홍길동
Email주소: honggd@a.com#(12) 위 딕셔너리에서 취미중 두번째 취미를 조회해서 출력하세요. info['취미'][1]'영화감상'
#(13) 위 딕셔너리에 몸무게와 키 항목을 추가하세요. info['키'] = 172.15 info['몸무게'] = 72.6 info{'이름': '홍길동',
'나이': 20,
'email주소': 'honggd@a.com',
'취미': ['독서', '영화감상', '게임'],
'결혼여부': False,
'키': 172.15,
'몸무게': 72.6}#(14) 위 딕셔너리에서 email 주소를 다른 값으로 변경하세요. info['email주소'] = "honggd@naver.com" info{'이름': '홍길동',
'나이': 20,
'email주소': 'honggd@naver.com',
'취미': ['독서', '영화감상', '게임'],
'결혼여부': False,
'키': 172.15,
'몸무게': 72.6}#(15) 위 딕셔너리에서 나이를 제거하세요. info.pop("나이") info{'이름': '홍길동',
'email주소': 'honggd@naver.com',
'취미': ['독서', '영화감상', '게임'],
'결혼여부': False,
'키': 172.15,
'몸무게': 72.6}del info['결혼여부'] info{'이름': '홍길동',
'email주소': 'honggd@naver.com',
'취미': ['독서', '영화감상', '게임'],
'키': 172.15,
'몸무게': 72.6}