◻자료구조
컨테이너 자료형
: 여러 개의 데이터가 묶여있는 자료형
자료구조
: 컨테이너 자료형의 데이터 구조
- 파이썬의 자료구조 :
리스트(List)
, 튜플(Tuple)
, 딕셔너리(Dict)
, 셋트(Set)
- List : ['홍길동', '박찬호', '이용규', '박승철']
- 반복 가능 객체, 중복 가능, 순서 있음, 값 변경 가능
- Tuple : ('의사', '속기사', '전기기사', '감정평가사')
- 반복 가능 객체, 중복 가능, 순서 있음, 값 변경 불가능
- Dict : {'kor':88, 'eng':91, 'mat':95, 'sci':90, 'his':100}
- 반복 가능 객체, 키(중복 불가, 변경 불가), 값의 쌍으로 이루어짐
- Set : {100, 150, 90, 110}
◻리스트
◾리스트
리스트(List)
: 배열과 같이 여러 개의 데이터를 나열한 자료구조
- 순서가 있는 반복 가능 객체(Iterable)
- 중복값 허용, 변경 허용
- 선언 : [ 아이템1, 아이템2, ... ]
- 숫자, 문자열, 논리형 등 모든 기본 데이터 저장 가능
- 리스트 내에 또 다른 컨테이너 자료형 저장 가능
studnets = ['홍길동', '박찬호', '이용규', '박승철']
print(studnets)
numbers = [10, 20, 30, 40, 50]
print(numbers)
strs = [3.14, '십', 20, 'one', '3.141592']
print(strs)
datas = [10, 20, 30, [40, 50, 60]]
print(datas)
인덱스(index)
: 아이템에 자동으로 부여되는 번호표(순서)
- 0부터 시작
- indexError : 잘못된 인덱스 사용시 에러 발생
students = ['홍길동', '박찬호', '이용규', '박승철']
print('students : {}'.format(students))
print('students[0] : {}, Type : {}'.format(students[0], type(students[0])))
print('students[1] : {}, Type : {}'.format(students[1], type(students[1])))
len()
: 리스트의 아이템 개수 반환
- 문자열에 사용하여 문자열의 길이를 알 수도 있다.
students = ['홍길동', '박찬호', '이용규', '박승철']
sLength = len(students)
print('students : {}'.format(students))
print('length of students : {}'.format(sLength))
for i in range(len(students)):
print('i : {}'.format(i))
print('students[{}] : {}'.format(i, students[i]))
◾반복문
1. enumerate()
enumerate()
: 열거형 함수
- 아이템을 인덱스와 값으로 표현
- 리스트, 튜플 등에 사용 가능
- 문자열에도 사용 가능
sports = ['농구', '수구', '축구', '마라톤', '테니스']
for i in range(len(sports)):
print('{} : {}'.format(i, sports[i]))
print('='*20)
for idx, value in enumerate(sports):
print('{} : {}'.format(idx, value))
2. for 문
- for문을 이용해 리스트의 아이템을 참조할 수 있다.
for i in range(len(cars)):
print(cars[i])
for car in cars:
print(car)
for idx car in enumerate(cars):
print(idx, car)
3. while 문
- while문을 이용해 리스트의 아이템을 참조할 수 있다.
cars = ["그랜저", '소나타', '말리부', '카니발', '쏘렌토']
n = 0
while n < len(cars):
print(cars[n])
n += 1
n = 0
flag = True
while flag:
print(cars[n])
n += 1
if n == len(cars):
flag = False
◾아이템 추가/삭제
1. 아이템 추가
students = ['홍길동', '박찬호', '이용규', '박승철']
print(students)
students.append('강호동')
print(students)
insert
: 특정 위치(인덱스)에 아이템 추가
students = ['홍길동', '박찬호', '이용규', '박승철']
print(students)
students.insert(3, '강호동')
print(students)
2. 아이템 삭제
pop()
: 마지막 인덱스에 해당하는 아이템 삭제 및 반환
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
print(students)
print(students.pop())
print(students)
pop(n)
: n 인덱스에 해당하는 아이템 삭제 및 반환
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
print(students)
print(students.pop(3))
print(students)
remove
: 특정 아이템을 삭제할 수 있다.
- 한 개의 데이터만 삭제(중복값을 삭제하기 위해서는 while을 사용해야 한다.)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print(students)
students.remove('강호동')
print(students)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print(students)
while '강호동' in students:
students.remove('강호동')
print(students)
◾리스트 연결/정렬/순서
1. 연결
extend()
: 리스트에 또 다른 리스트를 연결(확장)
- A.extend(B) : A에 B를 연결(확장)
students = ["홍길동", '박찬호', '이용규']
students2 = ['강호동', '박승철', '김지은']
print('students : {}, id : {}'.format(students, id(students)))
students.extend(students2)
print('students : {}, id : {}'.format(students, id(students)))
+(덧셈 연산자)
: 리스트에 또 다른 리스트를 연결(확장)
- C = A + B : A와 B를 연결(확장)한 새로운 리스트 생성
students = ["홍길동", '박찬호', '이용규']
students2 = ['강호동', '박승철', '김지은']
print('students : {}, id : {}'.format(students, id(students)))
students = students + students2
print('students : {}, id : {}'.format(students, id(students)))
2. 정렬
sort()
: 아이템 정렬
- 기본값 : 오름차순 정렬
reverse 옵션
: True -> 내림차순, False -> 오름차순
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
students.sort(reverse=False)
print('students : {}'.format(students))
3. 순서
reverse()
: 아이템 순서를 뒤집을 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
students.reverse()
print('students : {}'.format(students))
◾슬라이싱
[시작 : 종료 : 간격]
: 시작 <= n < 종료 구간의 아이템만 뽑을 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(students)
print(students[2:4])
print(students[:4])
print(students[2:])
print(students[2:-1])
print(students[2:-2:2])
print(students[-5:-2])
print(students[::-1])
print(students[-1])
- 슬라이싱을 통한 아이템 변경 : 지정한 범위의 아이템을 원하는 아이템으로 변경
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(students)
students[1:4] = ['park chanho', 'lee yonggyu', 'gang hodong']
print(students)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print(students)
print(students[slice(2, 4)])
print(students[slice(2, 4, 2)])
◾기타 기능
students = ['홍길동', '박찬호', '이용규']
print('students : {}'.format(students))
studentsMul = students * 2
print('studentsMul : {}'.format(studentsMul)
index(아이템, 시작, 종료)
: 아이템의 인덱스 찾기
- 아이템이 처음 나오는 인덱스를 반환한다.
- 인덱스를 찾을 범위를 지정할 수 있다.
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
searchIdx = students.index('강호동')
print('searchIdx : {}'.format(searchIdx))
searchIdx = students.index('강호동', 2, 6)
print('searchIdx : {}'.format(searchIdx))
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
selectCnt = students.count('강호동')
print('selectCnt : {}'.format(selectCnt))
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
del students[1]
print('students : {}'.format(students))
del students[1:4]
print('students : {}'.format(students))