데이터 취업 스쿨 스터디 노트 -(12) 자료구조, 리스트

테리·2024년 6월 18일
0

자료구조

여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
ex)
이름A, 이름B, 이름C, 이름D -> 묶어서 관리 = 컨테이너 자료형

Tuple은 한번 정해진 데이터는 변경할 수 없다.
Dictionary는 key와 value로 이루어짐
Set의 특징은 중복된 데이터가 존재할 수 없다.

리스트(List)

'[ ]'를 이용해서 선언하고 데이터 구분은 ','를 이용한다.
숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.
ex) datas = [10, 20, 30, [40, 50, 60]]

리스트 아이템 조회

인덱스란, 아이템에 자동으로 부여되는 번호표
pocketmon = ['피카츄', '리자몽', '루카리오']

  • 피카츄 -> 인덱스 0
  • 리자몽 -> 인덱스 1
  • 루카리오 -> 인덱스 2

pocketmon[0] -> 피카츄
pocketmon[1] -> 리자몽
pocketmon[2] -> 루카리오

리스트 길이

리스트 길이란, 리스트에 저장된 아이템 개수를 뜻한다.
len(pocketmon) -> 3
cf) 여기서 pocketmon이라는 변수를 레퍼런스 변수라고 한다.

for문을 이용한 조회

cars = ['그렌저', '소나타','말리부', '카니발', '쏘렌토']

for i in range(len(cars)):
    print(cars[i])

for car in cars:
    print(car)

studentsCnts = [[1,19],[2,20],[3,22],[4,18],[5,21]]
for i in range(len(studentsCnts)):
    print('{}학습 학생수: {}'.format(studentsCnts[i][0],studentsCnts[i][1]))

위아래 둘다 동일한 방법임.

for classNo, cnt in studentsCnts:
    print('{}학습 학생수: {}'.format(classNo,cnt))

while문을 이용한 조회

리스트는 for문이랑 많이 사용하지만 종종 while문이랑도 사용함.

enumerate()함수

enumerate()는 문자열에도 사용할 수 있다.
문자열에 사용하면 문자 하나하나가 적용된다.

리스트에 아이템 추가

append() 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.

특정 위치에 아이템 추가 하기

insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.
insert(인덱스, 데이터)

ex)

pocketmon = ['피카츄', '리자몽', '팬텀','망나뇽']

pocketmon.insert(3,'루기아')
print(pocketmon)
#결과 ['피카츄', '리자몽', '팬텀', '루기아', '망나뇽']

리스트의 아이템 삭제

pop() 함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.
pop(n): n인덱스에 해당하는 아이템을 삭제할 수 있다.

ex)
sports = ['농구', '축구', '마라톤', '테니스']
sports.pop()
print(sports)
#결과 -> ['농구', '축구', '마라톤']
sports = ['농구', '축구', '마라톤', '테니스']
sports.pop(2)
print(sports)
#결과 -> ['농구', '축구', '테니스']
sports = ['농구', '축구', '마라톤', '테니스']
value = sports.pop(2)
print(value)
#결과 -> 마라톤

리스트의 특정 아이템 삭제

remove()함수를 이용하면 특정 아이템을 삭제할 수 있다.
ex) remove('축구')

remove()는 한 개의 아이템만 삭제 가능하다. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용하자.
while '삭제 대상' in 리스트:

ex)
sports = ['농구', '축구', '마라톤', '축구','테니스']
print(sports)

#sports라는 리스트 안에 '축구'가 있으면 True
while '축구' in sports:
    sports.remove('축구')

print(sports)

리스트 연결

  • extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.

  • 앞에 리스트에 뒤에 리스트가 연결되는 것.

  • 덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.

  • 새로운 리스트가 생성되는 것

group1 = ['축구', '농구', '야구']
group2 = ['마라톤', '유도', '레슬링']
print('group1: {}'.format(group1))
print('group2: {}'.format(group2))
group1.extend(group2)
print('group1: {}'.format(group1))
print('group2: {}'.format(group2))
#  
#group1: ['축구', '농구', '야구', '마라톤', '유도', '레슬링']
#group2: ['마라톤', '유도', '레슬링']
result = group1 + group2
print('result: {}'.format(result))
print('group1: {}'.format(group1))
print('group2: {}'.format(group2))
#
#result: ['축구', '농구', '야구', '마라톤', '유도', '레슬링']
#group1: ['축구', '농구', '야구']
#group2: ['마라톤', '유도', '레슬링']

리스트 아이템 정렬

  • sort() 함수를 이용하면 아이템을 정리할 수 있다.
  • sort() 함수는 기본 오름차순
  • sort(reverse=True): 내림차순 정렬

리스트 아이템 순서 뒤집기

reverse() 함수를 이용하면 아이템 순서를 뒤집을 수 있다.
ex) 리스트.reverse()

리스트 슬라이싱

[n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.

ex)
students = ['홍길동', '박찬호', '이용규', '강호동', '손흥민','김연아']
print('students: {}'.format(students))
print('students: {}'.format(students[2:4]))

문자열도 슬라이싱 할 수 있음.
리스트 방식과 똑같음.


[2:-2:2]는 인덱스 2부터 뒤에서 2번째 인덱스 앞까지 가져오는데 전부 가져오는 것이 아니라 2칸씩 해당하는 것을 가져옴
[:-2:2]는 앞에서부터 뒤에서 2번째 인덱스 앞까지 가져오는데 2칸씩 해당하는 것을 가져옴

슬라이싱을 이용한 아이템 변경

개수 다르게 입력하면 그만큼만 추가됨

slice() 함수

slice() 함수를 이용해서 아이템을 슬라이싱 할 수 있다.
일반 슬라이싱 방식이랑 똑같음.
ex) students[slice(2,4)]

리스트 곱셈 연산

리스트를 곱셈 연산하면 아이템이 반복된다.

students = ['홍길동', '박찬호', '이용규']
studentsMul = students * 2
print(studentsMul)
-> ['홍길동', '박찬호', '이용규', '홍길동', '박찬호', '이용규']

아이템 위치 찾기

  • index(item) 함수는 item의 인덱스를 알아낼 수 있다.
  • 아이템이 중복된 경우 앞쪽에 있는 아이템의 인덱스만 알 수 있다.
  • index(item, a, b) 인덱스 a부터 인덱스 b 앞까지의 범위에서 item을 찾을 때의 인덱스값. 이때 인덱스 결과값은 전체 리스트를 대상으로 한 인덱스값이다.

특정 아이템의 개수 알아내기

count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.

ex)
count('피카츄')
todayData.count('피카츄')

특정 아이템 삭제

del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.
ex)
del students[1] -> 인덱스 1 아이템 삭제
del students[1:4] -> 인덱스 1에서부터 인덱스 4 앞의 아이템까지 삭제

0개의 댓글