본문 바로가기
제로베이스 데이터 스쿨/일일 스터디 노트

13일차 스터디노트 / 파이썬 자료구조, 리스트 자료형의 활용

by 김뎀뎀 2023. 1. 17.

※제로베이스 데이터 취업스쿨 11기 수강 중

📗 13일차 공부 내용 요약

[ 파이썬 자료구조 ]

리스트(list) 자료형의 개념과 여러 활용 법들을 알아보았다.

 

1. 리스트 자료형

2. 리스트와 for문

3. 리스트와 while문

4.리스트에 아이템 추가

5.리스트의 아이템 삭제

6.리스트 연결

7.리스트 아이템 정렬

8.리스트 슬라이싱

9.리스트 아이템 찾기

10.리스트 연산

 


📖  13일차 공부 내용 자세히

1. 리스트 자료형

 

■ 리스트?

  • 리스트는 배열과 같이 여러 개의 데이터를 나열한 자료 구조이다

 

■ 리스트 선언

  • [ ] 를 이용해서 선언하고, 데이터 구분은 ‘ , ‘ 을 이용한다
  • 리스트에 들어가는 하나하나의 데이터를 아이템(요소)라고 한다
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다
  • 리스트에 도 다른 컨테이너 자료형 데이터를 저장할 수도 있다
strs = [ 3.14, '십', 20, 'one', '3.141592']

datas = [ 10, 20, 30, [40, 50, 60]]

 

  인덱스

  • 인덱스란 아이템에 자동으로 부여되는 번호표이다
  • 인덱스는 0부터 순차적으로 부여된다
  • 리스트 아이템은 인덱스를 이용해서 조회 가능하다
students = ['문동은','박연진','이사라','최혜정','전재준', '손명오']

print(f'sutdenes[0] : {students[0]}') #문동은
print(f'sutdenes[2] : {students[1]}') #박연진
print(f'sutdenes[3] : {students[2]}') #이사라
print(f'sutdenes[4] : {students[3]}') #최혜정
print(f'sutdenes[5] : {students[4]}') #전재준
print(f'sutdenes[6] : {students[5]}') #손명오

for i in range(6):
    if i % 2 == 0:
        print(f'인덱스 짝수 : students[{i, students[i]}]')
    else:
        print(f'인덱스 홀수 : students[{i, students[i]}]')

 

■  리스트 길이

  • 리스트 길이란 리스트에 저장된 아이템 개수를 뜻한다
  • len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다
  • len()함수는 리스트의 개수뿐 아니라 문자열의 길이도 알 수 있다
# for문과 len()함수로 리스트 조회
students = ['문동은','박연진','이사라','최혜정','전재준', '손명오']

for i in range(len(students)):
    print(f'students[{i}] : {students[i]}')

# while문과 len()함수로 리스트 조회
n = 0
sLength = len(students)
while n < sLength :
    print(f'students[{n}] : {students[n]}')
    n += 1

#len()함수로 문자열 길이 조회
str = 'The Glory'
print(f'The Glory의 길이 : {len(str)}')

 

2. 리스트와 for문

 

■  for문

  • for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다
  • for문을 이용하면, 리스트 내부에 또 다른 리스트의 아이템을 조회할 수도 있다.
#for문으로 리스트 아이템 조회
students = ['문동은','박연진','이사라','최혜정','전재준', '손명오']

for stu in students:
    print(stu)

'''
문동은
박연진
이사라
최혜정
전재준
손명오
'''

#for문으로 리스트 내부의 리스트 아이템 조회
studenstCnts = [ [1, 19], [2, 20], [3,22], [4,18], [5,21]]

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

'''
1학급 학생 수 : 19
2학급 학생 수 : 20
3학급 학생 수 : 22
4학급 학생 수 : 18
5학급 학생 수 : 21
'''

 

■  enumerate()함수

  • enumerate()함수를 이용하면 아이템을 열거할 수 있다.
  • enumerate()는 문자열에도 적용할 수 있다.
#리스트와 enumerate()함수
students = ['문동은','박연진','이사라','최혜정','전재준', '손명오']

#변수에 인덱스와 요소가 할당된다
for idx, value in enumerate(students):
    print('{} : {}'.format(idx, value))

'''
0 : 문동은
1 : 박연진
2 : 이사라
3 : 최혜정
4 : 전재준
5 : 손명오
'''

#문자열과 enumerate()함수
str = 'the glogy'
for idx, value in enumerate(str):
    print('{} : {}'.format(idx,value))

'''
0 : t
1 : h
2 : e
3 :  
4 : g
5 : l
6 : o
7 : g
8 : y
'''

 

3. 리스트와 while문

  • while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다
students = ['문동은','박연진','이사라','최혜정','전재준', '손명오']

#첫번째 방법
n = 0
while n < len(students):
    print(students[n])

#두번째 방법
n = 0
flag = True
while (flag):
    print(students[n])
    n += 1
    if n == len(students):
        flag = False

#세번재 방법
n = 0
while True:
    print(students[n])
    n += 1
    if n == len(students):
        break
        

#while문으로 리스트 안에 리스트가 있는 아이템 조회

classCnt = [ [1,18], [2,19], [3,23], [4,21], [5,20]]

n = 0
while n < len(classCnt):
    print('{}학급 학생수 : {}'.format(classCnt[n][0], classCnt[n][1]))
    n += 1

 

4.리스트에 아이템 추가

 

■  아이템 추가

  • append() 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students.append('강호동')
# ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']

 

■  특정 위치에 아이템 추가

  • insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students.insert(3, '강호동') 
# ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']

 

5.리스트의 아이템 삭제

 

 

■  아이템 삭제

  • pop()함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다
  • pop(n)함수를 이용하면 n 인덱스에 해당하는 아이템을 삭제할 수 있다
  • pop() 함수는 삭제한 데이터를 반환해준다
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
rValue= students.pop() 
# ['홍길동', '박찬호', '이용규', '박승철', '김지은']

 

■  특정 아이템 삭제

  • remove() 함수를 이용하면 특정 아이템을 삭제할 수 있다
  • remove()는 한 개의 아이템만 삭제 가능하다. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용하자
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students.remove('강호동')
# ['홍길동', '박찬호', '이용규',  '박승철', '김지은']


#2개 이상의 데이터 삭제
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']

while '강호동' in students:
    students.remove('강호동')

# ['홍길동', '박찬호', '이용규',  '박승철', '김지은']

 

■  특정 아이템 삭제 / del 키워드

  • del 키워드를 사용하면 특정 아이템을 삭제할 수 있다.
  • del student[n] n인덱스의 아이템 삭제
  • del student[n:m] n부터 m-1인덱스의 아이템 삭제
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']

del students[1]
print('students: {}'.format(students))

del students[1:4]
print('students: {}'.format(students))

del students[2:]
print('students: {}'.format(students))

'''
students: ['홍길동', '박찬호', '이용규', '박승철', '강호동', '김지은']
students: ['홍길동', '강호동', '김지은']
students: ['홍길동', '강호동']

 

6.리스트 연결

  • extend()함수를 이용하면 리스트에 도 다른 리스트를 연결(확장)할 수 있다
  • 덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']

# extend()함수 활용
group1.extend(group2)

# 덧셈 연산자 활용
result = group1 + group2

#['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']

 

7,리스트 아이템 정렬

 

■  아이템 정렬

  • sort() 함수를 이용하면 아이템을 정렬할 수 있다.
  • sort() 오름차순 정렬
  • sort(reverse = True) 내림차순 정렬
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']

students.sort()
#[0.12, 1, 2, 3.14, 7, 9, 17, 35, 50, 100]

students.sort(reverse=True)
#100, 50, 35, 17, 9, 7, 3.14, 2, 1, 0.12]

 

■  아이템 순서 뒤집기

  • reverse()함수를 이용하면 아이템 순서를 뒤집을 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students.reverse()
#['김지은', '박승철', '강호동', '이용규', '박찬호', '홍길동']

 

8.리스트 슬라이싱

 

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

  • n부터 m-1에 있는 데이터를 뽑아낸다.
  • n ≤ result < m
  • 음수를 사용하면 뒷쪽에서 부터 계산한다, -1, -2, -3…
  • 단계 설정이 가능하다
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students[2:4])) 
print('students: {}'.format(students[:4]))
print('students: {}'.format(students[2:]))
print('students: {}'.format(students[2:-2])
print('students: {}'.format(students[-5:-2]))

'''
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']
'''

 

■  slice()함수를 이용해서 아이템을 슬라이싱 할 수 있다

students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students[slice(2, 4)]))
print('students: {}'.format(students[slice(4)]))
print('students: {}'.format(students[slice(2, len(students))]))
print('students: {}'.format(students[slice(2, len(students)-2)]))
print('students: {}'.format(students[slice(len(students)-5, len(students)-2)]))

'''
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']
students: ['이용규', '강호동']
students: ['박찬호', '이용규', '강호동']
'''

 

8.리스트 아이템 찾기

 

■  아이템 위치 찾기

  • index(item) 함수를 통해 item의 인덱스를 알아낼 수 있다.
  • index()는 같은 값이 있다면 가장 앞쪽에 있는 1개만 찾는다.
  • index( ‘찾는 아이템’, n, m) ⇒ n부터 m 앞(m-1)까지 찾는다
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']

searchIdx = students.index('강호동')
print('searchIdx: {}'.format(searchIdx))

searchIdx = students.index('강호동', 2, 6)
print('searchIdx: {}'.format(searchIdx))

'''
searchIdx: 1
searchIdx: 5
'''

 

■  아이템 개수 알아내기

  • count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 잇다.
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']

searchCnt = students.count('홍길동')
print('searchCnt: {}'.format(searchCnt))

searchCnt = students.count('강호동')
print('searchCnt: {}'.format(searchCnt))

searchCnt = students.count('김아무개')
print('searchCnt: {}'.format(searchCnt))

'''
searchCnt: 1
searchCnt: 2
searchCnt: 0
'''

 

9.리스트 연산

 

■  리스트 곱셈 연산

  • 리스트를 곱셈 연산하면 아이템이 반복된다
students = ['홍길동', '박찬호', '이용규']
print('students: {}'.format(students))

studentsMul = students * 2
print('studentsMul: {}'.format(studentsMul))

'''
students: ['홍길동', '박찬호', '이용규']
studentsMul: ['홍길동', '박찬호', '이용규', '홍길동', '박찬호', '이용규']
'''

➰ 13일차 후기

 

파이썬 중급(함수, 클래스 등) 을 배우면서 리스트 자료형이 자주쓰이길래, 혼자 찾아봤었던 내용이라 오늘은 수월하게 학습했다.  커리큘럼을 봤을 때는 '자료구조'라는 말이 뭔가 범상치 않은 포스가 풍겨서 뭘 배우려나 했었는데, 예상외로 배울만한(?) 내용이라서 안심했다. 앞으로도 이렇게 술술 배워지면 좋으련만 ~


※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.