[코테 대비 1] 파이썬 자료구조 총정리(list, tuple, dict)
01. random.sample( range(n,m), cnt)
n 부터 m-1 사이 랜덤값을 꺼내 cnt 길이의 리스트 반환
import random
randList = random.sample(range(1, 11), 10)
print(randList)
02. random.randrange(number)
0부터 number -1 사이의 랜덤값 1개 반환
import random
print(random.randrange(100)) # 1~99 사이의 값 1개 반환
list
1. 리스트 선언
대괄호와 콤마를 이용하여 리스트를 선언한다.
students = ['홍길동', '김철수']
numbers = [1,2,3,4,5]
mixed = [1, '이', 3, [4,5,6]]
2. 리스트 아이템 조회
인덱스를 이용하여 아이템 조회가 가능하다. 인덱스는 0부터 부여됨.
numbers = [1,2,3,4,5]
print(numbers[0]) # 1
3. 리스트 길이
리스트 안에 들어있는 아이템의 갯수를 의미한다. len( ) 내장함수 이용.
numbers = [1,2,3,4,5]
len(numbers) # 5
4. 리스트 for 반복문
1차원 리스트는 변수 1개면 됨
numbers = [1,2,3,4,5]
for n in numbers:
print(n)
for i in range(len(numbers)):
print(numbers[i])
2차원 리스트는 변수 2개 주면 데이터에 쉽게 접근할 수 있음 (이중반복문 또는 인덱스 불필요)
# -------------------------
# 이차원 리스트
studentNumbers = [[1,20], [2,21], [3,20]]
for classNo, cnt in studentNumbers:
print( classNo, cnt)
5. 리스트 enumerate( ) 함수
인덱스와 아이템을 한번에 조회할 수 있는 내장함수
sports = ['농구', '축구', '야구', '배구', '마라톤']
for idx, value in enumerate(sports):
print('{} : {}'.format(idx, value))
# 0 : 농구
# 1 : 축구
# 2 : 야구
# 3 : 배구
# 4 : 마라톤
6. 아이템을 리스트 맨 뒤에 추가하기 append( )
append( ) 함수를 사용하면 리스트에 아이템을 추가할 수 있다.
sports = ['농구', '축구', '야구', '배구', '마라톤']
sports.append('수영')
print(sports) # ['농구', '축구', '야구', '배구', '마라톤', '수영']
7. 아이템을 특정 인덱스 위치에 추가하기 insert( )
sports = ['농구', '축구', '야구', '배구', '마라톤']
sports.insert(0, '수영') # 0번 인덱스에 데이터 추가, 뒤로 밀려남
print(sports) # ['수영', '농구', '축구', '야구', '배구', '마라톤']
8. 리스트의 마지막 아이템을 삭제하기 pop( )
sports = ['농구', '축구', '야구', '배구', '마라톤']
last = sports.pop() # 마지막 데이터 삭제됨
print(sports) # ['농구', '축구', '야구', '배구']
print(last) # 마라톤
9. 리스트의 특정 인덱스 값을 삭제하기 pop( idx )
sports = ['농구', '축구', '야구', '배구', '마라톤']
data = sports.pop(3) # 인덱스 3인 데이터 삭제됨
print(sports) # ['농구', '축구', '야구', '마라톤']
print(data) # 배구
10. 리스트의 특정 아이템을 삭제하기 remove( value )
# 해당 아이템이 중복되어 들어있다면 가장 앞에 있는 값을 삭제한다.
# 리스트에 해당 아이템이 존재하지 않으면 오류 발생.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
data = sports.remove('배구') # '배구' 라는 값 삭제
print(sports) # ['농구', '축구', '야구', '마라톤', '배구', '배구']
print(data) # None
# 중복된 아이템 모두 삭제하고자 할 때 while 문 + in 메서드를 사용한다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
item = '배구'
while item in sports:
sports.remove(item)
print(sports) # ['농구', '축구', '야구', '마라톤']
11. 리스트 연결하기
(1) extend( ): 리스트1에 리스트2를 연결하여 리스트1을 확장한다.
groupA = ['a', 'b', 'c']
groupB = [1, 2, 3, 4, 5]
groupA.extend(groupB)
print(groupA) # ['a', 'b', 'c', 1, 2, 3, 4, 5]
print(groupB) # [1, 2, 3, 4, 5]
(2) 뎃셈 연산자 +: 리스트1과 리스트 2를 연결하여 리스트3을 생성한다.
groupA = ['a', 'b', 'c']
groupB = [1, 2, 3, 4, 5]
groupC = groupA + groupB
print(groupA) # ['a', 'b', 'c']
print(groupB) # [1, 2, 3, 4, 5]
print(groupC) # ['a', 'b', 'c', 1, 2, 3, 4, 5]
12. 리스트 아이템 정렬하기 sort( ) 오름차순 / sort ( reverse = True ) 내림차순
문자 숫자 모두 정렬 가능하다.
groupA = ['cat', 'apple', 'banana']
groupB = [4, 1, 3, 2, 5]
groupA.sort()
groupB.sort(reverse = True)
print(groupA) # ['apple', 'banana', 'cat']
print(groupB) # [5, 4, 3, 2, 1]
13. 리스트 아이템 순서 뒤집기 reverse( )
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports.reverse()
print(sports) # ['배구', '배구', '마라톤', '배구', '야구', '축구', '농구']
14. 리스트 슬라이싱 [n:m]
# list의 인덱스 n 부터 m-1까지 슬라이싱한다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports[1:3]) # ['축구', '야구']
# 인덱스를 생략하면 끝까지를 의미한다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
# 인덱스 안쓰면 끝까지를 포함
print(sports[:3]) # ['농구', '축구', '야구']
print(sports[3:]) # ['배구', '마라톤', '배구', '배구']
# 전체
print(sports[:]) # ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
# 인덱스는 음수도 가능하다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
# 음수도 가능
print(sports[-5:-2]) # ['야구', '배구', '마라톤']
# 슬라이싱의 단계(step)를 설정할 수 있다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports[1:6:2]) # ['축구', '배구', '배구']
print(sports[::2]) # ['농구', '야구', '마라톤', '배구']
# 슬라이싱을 이용해 아이템을 변경할 수 있다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports[:2] = ['basket ball', 'soccer']
print(sports) # ['basket ball', 'soccer', '야구', '배구', '마라톤', '배구', '배구']
15. 리스트 슬라이싱 리스트명[ slice(n,m) ]
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports[slice(2,4)]
print(sports) # ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports[slice(2,4)]) # ['야구', '배구']
16. 리스트 곱셈 연산 list * n
리스트 내 아이템을 n배로 늘린다.
num = [1, 2]
print(num*2) # [1, 2, 1, 2]
17. 리스트 아이템의 위치(인덱스) 찾기 index( value ) 또는 index( value, startIndex, endIndex )
범위 내 가장 맨 앞에 있는 아이템의 인덱스를 반환한다.
아이템이 없으면 오류 반환
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports.index('배구') # 3
sports.index('배구', 4, 6) # 5
18. 리스트 내 특정 아이템의 개수를 알아내기 count( )
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports.count('배구')) # 3
print(sports.count('야구')) # 1
print(sports.count('수영')) # 0
19. 리스트 내 특정 아이템 삭제하기 del ( )
# 범위 내 가장 맨 앞에 있는 아이템을 삭제한다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
del sports[0] # 농구 삭제
del sports[0] # 축구 삭제
del sports[0] # 야구 삭제
print(sports) # ['배구', '마라톤', '배구', '배구']
# 슬라이싱으로 다수 아이템 삭제가 가능하다.
sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
del sports[4:] # '마라톤', '배구', '배구' 삭제
print(sports) # ['농구', '축구', '야구', '배구']
tuple
1. 튜플 선언은 소괄호 ( )
튜플은 한번 선언되면 아이템을 수정하거나 삭제할 수 없다
다양한 자료형을 혼합하여 아이템으로 사용할 수 있다.
numbers = (1, 2, 3, 4, 5, [1,2,3], (1,2,3))
print(numbers) # (1, 2, 3, 4, 5, [1, 2, 3], (1, 2, 3))
numbers[0] = 0 # 불가
2. 튜플 아이템 조회하기
인덱스 이용하여 해당 데이터 조회가 가능하다.
numbers = (1, [1,2,3], (1,2,3))
print(numbers[0]) # 1
print(numbers[1]) # [1, 2, 3]
print(numbers[2]) # (1, 2, 3)
3. 튜플 in, not in 키워드 사용하기
# 아이템 존재 유무를 확인할 수 있다.
sports = ['농구', '축구', '야구', '배구']
print('농구' in sports) # True
print('수영' in sports) # False
# 문자열 에서도 in, not in 키워드 사용가능하다.
pythonStr = '파이썬 python은 고급프로그래밍 언어로, ' \
'플랫폼에 독립적이며 인터프리터식 대화형 언어이다. '\
'파이썬이라는 이름은 코미디 이름에서 따온 것이다.'
print('파이썬' in pythonStr) # True
print('파이선' in pythonStr) # False
print('python' in pythonStr) # True
4. 튜플 길이 확인하기 len ( )
sports = ('농구', '배구', '야구')
print(len(sports)) # 3
5. 튜플 결합하기
튜플은 한번 선언되면 수정할 수 없기 때문에 extend 안됨. 덧셈연산자로 결합 가능하다.
sports1 = ('농구', '배구', '야구')
sports2 = ('축구', '당구', '수영')
sports3 = sports1 + sports2
print(sports1) # ('농구', '배구', '야구')
print(sports2) # ('축구', '당구', '수영')
print(sports3) # ('농구', '배구', '야구', '축구', '당구', '수영')
튜플이 아닌 데이터를 튜플과 결합하기 위해선, 형변환이 필요하다. 튜플 형변환 (num , )
numbers = (1,2,3)
num = 10
total = numbers + num # 오류 발생
total = numbers + (num,) # 형이 다른 데이터는 튜플로 형변환 한 후 결합할 수 있다.
print(total) # (1, 2, 3, 10)
6. 튜플 슬라이싱 하기
리스트 슬라이싱과 동일. 단, 슬라이싱을 통한 데이터 변경, 수정은 안됨.
튜플을 선언할 떈 소괄호 ( ) 썼지만, 아이템에 접근할 땐 대괄호 [ ] 를 사용한다.
numbers = (1,2,3,4,5,6,7,8,9,10)
print(numbers[0:5]) # (1, 2, 3, 4, 5)
print(numbers[5:9]) # (6, 7, 8, 9)
print(numbers[:]) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(numbers[-5:]) # (6, 7, 8, 9, 10)
7. 튜플 아이템 정렬하기 sort( ) 와 sorted( )
sort( ) : 원본을 수정함. 튜플은 수정이 불가하기 때문에, 리스트로 형변환 후 정렬 가능하다.
numList = [4,7,2,8,9,3,1,10]
numTuple = (4,7,2,8,9,3,1,10)
numList.sort() # 리스트는 sort() 가능
numTuple.sort() # 튜플은 sort() 불가능
print(numList) # [1, 2, 3, 4, 7, 8, 9, 10]
print(numTuple) # X
sorted( ) : 리스트로 반환해줌. 튜플의 아이템을 정렬하여 리스트로 반환해준다. 따라서 튜플 자료형에서도 사용가능
numList = [4,7,2,8,9,3,1,10]
numTuple = (4,7,2,8,9,3,1,10)
newList = sorted(numList) # 리스트는 sort() 가능
newTuple = sorted(numTuple) # 튜플은 sort() 불가능
print(newList) # [1, 2, 3, 4, 7, 8, 9, 10]
print(newTuple) # [1, 2, 3, 4, 7, 8, 9, 10]
8. 튜플 for 반복문 이용하기
이중 튜플은 변수를 2개 둬서 값을 조회할 수 있다. 인덱스 없이 가능
studentNum = ( (1,20), (2,21), (3,20) )
for num, stu in studentNum:
print(num, stu)
# 1 20
# 2 21
# 3 20
9. 튜플과 리스트의 형변환
리스트와 튜플은 자료형 변환이 가능하다. list( ) tuple( )
numList = [1,2,3,4,5,6,7,8,9,10]
numTuple = tuple(numList)
numList2 = list(numTuple)
print(type(numList)) # <class 'list'>
print(type(numTuple)) # <class 'tuple'>
print(type(numList2)) # <class 'list'>
dict
1. 딕셔너리 선언. 중괄호 { }를 이용한다.
딕셔너리는 key와 value를 이용하여 자료를 관리한다.
student1 = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
student2 = {'이름': '이영희', '나이':5, '취미':['노래부르기', '영화보기']}
student3 = {'이름': '홍길동', '나이':20, '취미':['피아노', '노래부르기']}
students = {1:student1, 2:student2, 3:student3}
2. 딕셔너리 조회하기
# key 값을 이용하여 value를 조회할 수 있다. 딕셔너리는 인덱스로 조회 불가능
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print(student['이름']) # 김철수
print(student['나이']) # 12
print(student['취미']) # ['독서', '노래부르기']
print(student['취미'][0]) # 독서
print(student['취미'][1]) # 노래부르기
# get (key)를 이용해 value를 조회할 수 있다.
딕셔너리에 key가 없어도 에러가 발생하지 않는다. None 반환
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print(student.get('이름')) # 김철수
print(student.get('영어 이름')) # None
3. 딕셔너리 추가하기
key-value 쌍으로 데이터를 추가할 수 있다.
myInfo = { } # 딕셔너리 선언
myInfo['이름'] = '김철수'
myInfo['나이'] = 12
myInfo['취미'] = ['노래부르기', '피아노']
print(myInfo) # {'이름': '김철수', '나이': 12, '취미': ['노래부르기', '피아노']}
4. 딕셔너리 수정하기
같은 key로 데이터를 입력할 경우, 값이 수정된다.
myInfo = { } # 딕셔너리 선언
myInfo['이름'] = '김철수'
myInfo['나이'] = 12
myInfo['나이'] = 20
print(myInfo) # {'이름': '김철수', '나이': 20}
5. keys() 와 values()
전체 key 반환, 전체 value 반환해주는 함수로, list( )로 형 변환 해줘야 리스트 자료형 된다.
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print(student.keys()) # dict_keys(['이름', '나이', '취미'])
print(student.values()) # dict_values(['김철수', 12, ['독서', '노래부르기']])
print(list(student.keys())) # ['이름', '나이', '취미']
print(list(student.values())) # ['김철수', 12, ['독서', '노래부르기']]
items()
리스트 안에 key-value 를 튜플 형태로 받아온다.
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print(student.items()) # dict_items([('이름', '김철수'), ('나이', 12), ('취미', ['독서', '노래부르기'])])
print(list(student.items())) # [('이름', '김철수'), ('나이', 12), ('취미', ['독서', '노래부르기'])]
# 딕셔너리는 인덱스로 조회 불가함. keys() 이용하여 value에 접근 가능하다.
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
for info in student.keys():
print(student[info])
# 김철수
# 12
# ['독서', '노래부르기']
6. 딕셔너리 삭제하기
del
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
del student['이름']
del student['나이']
print(student) # {'취미': ['독서', '노래부르기']}
pop ( ) 삭제한 데이터를 반환해준다.
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
name = student.pop('이름')
age = student.pop('나이')
print(student) # {'취미': ['독서', '노래부르기']}
print(name) # 김철수
print(age) # 12
7. 딕셔너리 in, not in 키워드를 사용하여 키 존재 유무 확인하기
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print('이름' in student) # True
print('성별' in student) # False
8. 딕셔너리 len( )을 사용하여 아이템의 개수를 확인하기
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
print(len(student)) # 3
9. 딕셔너리 clear( )를 사용하여 딕셔너리 내 모든 데이터를 삭제한다.
student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
student.clear()
print(student) # {} 빈 딕셔너리