1. 리스트
리스트명 = [값1, 값2, ... ]
- 다양한 데이터형을 섞어 생성할 수 있음
1) 리스트[첨자] 형식으로 접근
- 맨 앞에서는 0으로 시작
- 맨 뒤에서는 -1로 시작
- 콜론(:)을 사용해 범위 지정(콜론의 앞이나 뒤 숫자를 생략가능) -> 리스트명[시작값:끝값+1]
ex)
aa = []
for i in range(0, 4) : # 초기화 작업 -> 우선, 모든 원소 값을 0으로 채우기
aa.append(0)
hap = 0
for i in range(0, 4) : # 원소 입력
aa[i] = int(input(str(i + 1) + "번째 숫자 : "))
for i in range(0, 4) : # 원소의 합
hap = hap + aa[i]
print("합계==>%d" % hap)
[실행결과]
1번째 숫자 : 10
2번째 숫자 : 20
3번째 숫자 : 30
4번째 숫자 : 40
합계==>100
- 덧셈 연산 : 요소들이 합쳐져 결과르 리스트가 하나가 됨
- 곱셈 연산 : 항목들이 횟수만큼 반복해서 출력됨
aa = [10, 20, 30]
bb = [40, 50, 60]
print(aa + bb) # 덧셈
print(aa * 3) # 곱셈
[실행결과]
[10, 20, 30, 40, 50, 60]
[10, 20, 30, 10, 20, 30, 10, 20, 30]
- aa[::2] : 앞에서부터 2칸씩 건너뛰기 (+ 방향)
- aa[::-2] : 뒤에서부터 2칸씩 건너뛰기 (- 방향)
2) 리스트 값 변경
ex 1)
aa = [10, 20, 30]
aa[1:2] = [200, 201] # 즉 두 번째인 aa[1]의 위치를 [200, 201]로 교체
print(aa)
[실행결과] [10, 200, 201, 30]
ex 2)
aa = [10, 20, 30]
aa[1] = [200, 201] # aa[1:2] 대신 적용
print(aa)
[실행결과] [10, [200, 201], 30]
3) 리스트의 항목 삭제
ex 1) del() 함수 사용
aa = [10, 20, 30]
del(aa[1])
print(aa)
[실행결과] [10, 30]
ex 2) 항목을 여러 개 삭제 -> aa[시작값:끝값+1]=[]
aa = [10, 20, 30, 40, 50]
aa[1:4] = []
print(aa)
[실행결과] [10, 50]
ex 3) 리스트 자체를 삭제
aa = [10, 20, 30] ; aa = []; print(aa) # 리스트 내용르 모두 삭제 -> 빈 리스트
aa = [10, 20, 30] ; aa = None; print(aa) # aa를 빈 변수로 만들기
aa = [10, 20, 30] ; del(aa); print(aa) # aa변수를 삭제
[실행결과]
[]
None (아무것도 안 나옴)
오류 발생
4) 리스트 조작 함수
append() | 리스트 맨 뒤에 항목 추가 | 리스트명.append(값) |
pop() | 리스트 맨 뒤의 항목 빼기 (리스트에서 해당 항목이 삭제됨) | 리스트명.pop() |
sort() | 리스트의 항목 정렬 | 리스트명. sort() |
reverse() | 리스트 항목의 순서를 역순 정렬 | 리스트명.reverse() |
index() | 지정한 값을 찾아 해당 위치 반환 | 리스트명.index(찾을값) |
insert() | 지정된 위치에 값을 삽입 | 리스트명.insert(위치, 값) |
remove() | 리스트에서 지정한 값을 삭제 (지정한 값이 여러 개면 첫 번째 값만 지움) | 리스트명.remove(지울값) |
extend() | 리스트 뒤에 리스트를 추가 (더하기 + 연산과 기능이 동일) | 리스트명.extend(추가할리스트) |
count() | 리스트에서 해당 값의 개수를 셈 | 리스트명.count(찾을값) |
clear() | 리스트의 내용을 모두 지움 | 리스트명.clear() |
del() | 리스트에서 해당 위치의 항목을 삭제 | del(리스트명[위치]) |
len() | 리스트에 포함된 전체 항목의 개수 | len(리스트명) |
copy() | 리스트의 내용을 새로운 리스트에 복사 | 새리스트=리스트명.copy() |
sorted() | 리스트의 항목을 정렬해서 새로운 리스트에 대입 | 새리스트=sorted(리스트) |
myList = [30, 10, 20]
print("현재 리스트 : %s" % myList)
myList.append(40) # 맨 뒤에 항목 추가
print("append(40) 후의 리스트 : %s" % myList)
print("pop()으로 추출한 값 : %s" % myList.pop()) # 맨 뒤의 항목을 빼냄
print("pop() 후의 리스트 : %s" % myList)
myList.sort() # 항목 정렬
print("sort() 후의 리스트 : %s" % myList)
myList.reverse() # 순서를 역순으로 정렬
print("reverse() 후의 리스트 : %s" % myList)
print("20값의 위치 : %d" % myList.index(20)) # 해당 위치 반환
myList.insert(2, 222) # index 2위치에 222 삽입
print("insert(2, 222) 후의 리스트 : %s" % myList)
myList.remove(222) # 지정한 값 삭제
print("remove(222) 후의 리스트 : %s" % myList)
myList.extend([77, 88, 777]) # 리스트 뒤에 리스트를 추가
print("extend([77, 88, 777]) 후의 리스트 : %s" % myList)
print("77값의 개수 : %d" % myList.count(77)) # 해당값의 개수를 나타냄
[실행결과]
현재 리스트 : [30, 10, 20]
append(40) 후의 리스트 : [30, 10, 20, 40]
pop()으로 추출한 값 : 40
pop() 후의 리스트 : [30, 10, 20]
sort() 후의 리스트 : [10, 20, 30]
reverse() 후의 리스트 : [30, 20, 10]
20값의 위치 : 1
insert(2, 222) 후의 리스트 : [30, 20, 222, 10]
remove(222) 후의 리스트 : [30, 20, 10]
extend([77, 88, 777]) 후의 리스트 : [30, 20, 10, 77, 88, 777]
77값의 개수 : 1
5) 2차원 리스트
ex) 3행 4열의 2차원 리스트 생성
list1 = []
list2 = []
value = 1
for i in range(0, 3) :
for j in range(0, 4) :
list1.append(value) # 항목이 4개인 1차원 리스트 생성
value += 1
list2.append(list1) # 만든 리스트를 2차원 리스트에 추가
list1 = [] # 빈 리스트로 초기화
for i in range(0, 3) :
for j in range(0, 4) :
print("%3d" % list2[i][j], end =" ") # 행 넘기지 않고 띄어쓰기로 출력하도록 설정
print("")
[실행결과]
1 2 3 4
5 6 7 8
9 10 11 12
2. 튜플
값이 여러 개 -> 튜플명 = (값1, 값2, 값3 ...) or 값1, 값2, 값3
값이 하나 -> 튜플명 = (값, )
1) 생성
- 튜플은 읽기 전용이므로 다음 코드는 모두 오류 발생
tt1.append(40)
tt1[0] = 40
del(tt1[0])
- 튜플 자체를 삭제할 경우 -> del() 함수 이용 ex) del(tt1)
2) 사용
- 튜플 항목에 접근 : 튜플명[위치] ex) tt1[0]
- 튜플 범위에 접근 : (시작값:끝값+1) (리스트와 동일)
- 덧셈 및 곱셈 연산도 가능
- 튜플의 항목을 변경하려면 먼저 튜플을 리스트로 변환해 항목을 변경 -> 다시 튜플로 변환
myTuple = (10, 20, 30)
myList = list(myTuple) # 튜플을 리스트로 변환
myList.append(40) # 항목 변경
myTuple = tuple(myList) # 다시 리스트를 튜플로 변환
print(myTuple)
[실행결과] (10, 20, 30, 40)
3. 딕셔너리
Dictionary : 쌍 2개가 하나로 묶인 자료구조, 중괄호 { }로 묶어 구성하며, 키(Key)와 값(Value)의 쌍으로 구성
딕셔너리변수 = {키1:값1, 키2:값2, 키3:값3, ...}
1) 생성
- 딕셔너리명[키]=값 형식으로 쌍을 추가할 수 있음
- 순서가 없음 (키를 사용해 추출하기 때문에 순서가 필요 X)
- 이미 존재하는 키를 사용하려면 새로운 쌍이 추가되는 것이 아니라 기존값이 변경됨 -> 키는 유일해야 하기 때문
student1 = {'학번' : 1000, '이름' : '홍길동', '학과' : '컴퓨터학과'}
student1['연락처'] = '010-1111-2222' # 쌍 추가
print(student1)
del(student1['학과']) # 쌍 삭제
print(student1)
[실행결과]
{'학번': 1000, '이름': '홍길동', '학과': '컴퓨터학과', '연락처': '010-1111-2222'}
{'학번': 1000, '이름': '홍길동', '연락처': '010-1111-2222'}
2) 사용
- 키를 이용해 값을 구함 ex) student1['학번']
- 딕셔너리명.get(키) 함수를 사용하여 접근
-> 딕셔너리명[키]와 딕셔너리명.get(키)의 결과는 동일
student1['주소']
student1.get('주소')
- 딕셔너리의 모든 키 반환 : 딕셔너리명.keys()
- 딕셔너리의 모든 값 반환 : 딕셔너리명.values()
student1 = {'학번' : 1000, '이름' : '홍길동', '학과' : '컴퓨터학과'}
print(student1.keys()) # 모든 키 반환
print(list(student1.keys())) # dict_keys() 보기 싫을 경우
print(student1.values())
print(list(student1.values())) # dict_values() 보기 싫을 경우
print(student1.items()) # 튜플 형태로 출력
[실행결과]
dict_keys(['학번', '이름', '학과'])
['학번', '이름', '학과']
dict_values([1000, '홍길동', '컴퓨터학과'])
[1000, '홍길동', '컴퓨터학과']
dict_items([('학번', 1000), ('이름', '홍길동'), ('학과', '컴퓨터학과')])
- 딕셔너리 안에 해당 키가 있는지 없는지 in을 사용하여 확인 -> 키가 있다면 True 반환, 없다면 False 반환
ex) '이름' in student1
ex) for문을 활용해 딕셔너리의 모든 값을 출력
singer = {}
singer['이름'] = '트와이스'
singer['구성원 수'] = 9
singer['데뷔'] = '식스틴'
singer['대표곡'] = 'signal'
for i in singer.keys() : # key 개수만큼 반복
print("%s --> %s" % (i, singer[i]))
[실행결과]
이름 --> 트와이스
구성원 수 --> 9
데뷔 --> 식스틴
대표곡 --> signal
3) 정렬
: 키로 정렬하면 각 결과는 튜플로 변경되며 리스트로 반환됨
ex 1)
import operator # itemgetter() 함수를 사용하기 위해 임포트
trainDic, trainList = {}, [] # 빈 딕셔너리와 리스트 준비
trainDic = {'Thomas' : '토마스', 'Edward' : '에드워드', 'Henry' : '헨리', 'Gothen' : '고든', 'James' : '제임스'}
trainList = sorted(trainDic.items(), key=operator.itemgetter(0)) # key를 기준으로 딕셔너리 정렬하여 빈 리스트에 대입
print(trainList)
trainList = sorted(trainDic.items(), key=operator.itemgetter(1)) # value를 기준으로 딕셔너리 정렬하여 빈 리스트에 대입
print(trainList)
- 키로 정렬하려면 -> operator.itemgetter(0)로 변경
- 값으로 정렬하려면 -> operator.itemgetter(1)로 변경
[실행결과] 리스트 안에 튜플로 딕셔너리 항목이 변경됨
[('Edward', '에드워드'), ('Gothen', '고든'), ('Henry', '헨리'), ('James', '제임스'), ('Thomas', '토마스')]
[('Gothen', '고든'), ('Edward', '에드워드'), ('James', '제임스'), ('Thomas', '토마스'), ('Henry', '헨리')]
ex 2) 딕셔너리를 활용해 음식 궁합 출력
foods = {"떡볶이" : "오뎅",
"짜장면" : "단무지",
"라면" : "김치",
"피자" : "피클",
"맥주" : "땅콩",
"치킨" : "치킨무",
"삼겹살" : "상추"}
while (True) :
myfood = input(str(list(foods.keys())) + " 중 좋아하는 음식은? ")
if myfood in foods : # 입력한 값이 딕셔너리에 있다면
print("<%s> 궁합 음식은 <%s>입니다." % (myfood, foods.get(myfood))) # 키를 이용하여 값을 출력
elif myfood == "끝" :
break
else :
print("그런 음식이 없습니다.")
[실행결과]
['떡볶이', '짜장면', '라면', '피자', '맥주', '치킨', '삼겹살'] 중 좋아하는 음식은? 피자
<피자> 궁합 음식은 <피클>입니다.
['떡볶이', '짜장면', '라면', '피자', '맥주', '치킨', '삼겹살'] 중 좋아하는 음식은? 마라탕
그런 음식이 없습니다.
['떡볶이', '짜장면', '라면', '피자', '맥주', '치킨', '삼겹살'] 중 좋아하는 음식은? 끝
출처: 파이썬 for Beginner (우재남 지음, 한빛아카데미)
'Python > for Beginner' 카테고리의 다른 글
[Python] 반복문 (0) | 2022.01.07 |
---|---|
[Python] 윤년 계산하기 (0) | 2022.01.06 |
[Python] 연산자 연습 - 동전교환 프로그램 만들기 (0) | 2022.01.06 |
[Python] print() 함수 서식 지정 및 format() 함수 (0) | 2022.01.06 |