자료구조(파이썬) - 리스트

이상해씨·2021년 10월 1일
0

자료구조, 알고리즘

목록 보기
11/20
post-custom-banner

◻자료구조

  • 컨테이너 자료형 : 여러 개의 데이터가 묶여있는 자료형
  • 자료구조 : 컨테이너 자료형의 데이터 구조
    • 각 컨테이너 자료형에 따라 차이가 있다.
  • 파이썬의 자료구조 : 리스트(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])))
# 오류 발생
# print('students[4] : {}'.format(students[4]))
  • len() : 리스트의 아이템 개수 반환
    • 문자열에 사용하여 문자열의 길이를 알 수도 있다.
# 리스트 길이
students = ['홍길동', '박찬호', '이용규', '박승철']
sLength = len(students)
print('students : {}'.format(students))
print('length of students : {}'.format(sLength))

# len을 통한 조회
for i in range(len(students)):
    print('i : {}'.format(i))
    print('students[{}] : {}'.format(i, students[i]))

◾반복문

1. enumerate()

  • 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
for i in range(len(cars)):
    print(cars[i])
# Iterable은 for .. in Iterable로 사용 가능
for car in cars:
    print(car)
# enumerate() 활용
for idx car in enumerate(cars):
    print(idx, car)

3. while 문

  • while문을 이용해 리스트의 아이템을 참조할 수 있다.
# while
cars = ["그랜저", '소나타', '말리부', '카니발', '쏘렌토']
n = 0
while n < len(cars):
    print(cars[n])
    n += 1
# flag 활용
n = 0
flag = True
while flag:
    print(cars[n])
    n += 1
    if n == len(cars):
        flag = False

◾아이템 추가/삭제

1. 아이템 추가

  • append : 마지막 인덱스에 아이템 추가
# append
students = ['홍길동', '박찬호', '이용규', '박승철']
print(students)
students.append('강호동')
print(students)
  • insert : 특정 위치(인덱스)에 아이템 추가
# insert
students = ['홍길동', '박찬호', '이용규', '박승철']
print(students)
students.insert(3, '강호동')
print(students)

2. 아이템 삭제

  • pop() : 마지막 인덱스에 해당하는 아이템 삭제 및 반환
# pop
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
print(students)
print(students.pop())
print(students)
  • pop(n) : n 인덱스에 해당하는 아이템 삭제 및 반환
# pop(n)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
print(students)
print(students.pop(3))
print(students)
  • remove : 특정 아이템을 삭제할 수 있다.
    • 한 개의 데이터만 삭제(중복값을 삭제하기 위해서는 while을 사용해야 한다.)
# remove
# 처음 만나는 강호동만 삭제
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print(students)
students.remove('강호동')
print(students)

# 모든 강호동 삭제
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print(students)
while '강호동' in students:
    students.remove('강호동')
print(students)

◾리스트 연결/정렬/순서

1. 연결

  • extend() : 리스트에 또 다른 리스트를 연결(확장)
    • A.extend(B) : A에 B를 연결(확장)
# extend
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 -> 오름차순
# sort
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
students.sort(reverse=False)
print('students : {}'.format(students))

3. 순서

  • reverse() : 아이템 순서를 뒤집을 수 있다.
# 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)
  • slice(시작, 종료, 간격)
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(아이템, 시작, 종료) : 아이템의 인덱스 찾기
    • 아이템이 처음 나오는 인덱스를 반환한다.
    • 인덱스를 찾을 범위를 지정할 수 있다.
# index
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
searchIdx = students.index('강호동')
print('searchIdx : {}'.format(searchIdx))
searchIdx = students.index('강호동', 2, 6)
print('searchIdx : {}'.format(searchIdx))
  • count(아이템) : 아이템을 개수 반환
# count()
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
selectCnt = students.count('강호동')
print('selectCnt : {}'.format(selectCnt))
  • del 키워드 : 특정 아이템 삭제
    • 인덱싱, 슬라이싱으로 삭제할 아이템 선택
# del
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students : {}'.format(students))
del students[1]
print('students : {}'.format(students))
del students[1:4]
print('students : {}'.format(students))
profile
후라이드 치킨
post-custom-banner

0개의 댓글