파이썬 자료구조1

InSung-Na·2023년 1월 17일
0
post-thumbnail

해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다

📌자료구조

  • 컨테이너 자료형 : 여러 개의 데이터가 묶여있는 자료형 구조
    자료 구조 : 컨테이너 자료형의 데이터구조
    ex) List, Tuple, Dictionary, Set
    (출처:제로베이스데이터스쿨)

📌리스트

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조
  • 어떤 자료형이든 리스트 안에 넣을 수 있다. 리스트 안에 리스트도 가능

📝입력

userList = [1, 2, '세번째', [4, '번', '째'], 'Five']
print(userList)

🧾출력

[1, 2, '세번째', [4, '번', '째'], 'Five']

📌인덱스

  • 컨테이너형 자료에는 데이터의 위치에 해당하는 번호가 지정된다(단, 0부터 시작)
    (출처:제로베이스데이터스쿨)

📝입력

userList = [1, 2, '세번째', [4, '번', '째'], 'Five']
print(userList)

🧾출력

[1, 2, '세번째', [4, '번', '째'], 'Five']

📌인덱싱

  • 인덱스를 이용하여 1개의 데이터를 조회하는 것

📝입력

userList = [1, 2, '세번째', [4, '번', '째'], 'Five']
print(userList[4])

🧾출력

Five

📌슬라이싱 iterable[start:end:step]

  • 인덱스를 이용하여 여러 개의 데이터를 조회하는 것
  • 인덱스가 start <= idx < end에 속하는 데이터만 step간격으로 반환
  • 인덱스 0를 기준으로 음수도 가능, list[-1]이 마지막 아이템
  • 아래 그림의 리스트에서 list[0:4]로 하면 0~4사이에 있는 'zero'만 반환된다

iterable이란, 하나씩 반환이 가능한 데이터를 의미한다. 문자열, 컨테이너형 등

📝입력

userStr = 'ZeroBaseDataSchool'
print(userStr[:4]) # Zero
print(userStr[4:8]) # Base
print(userStr[8:]) # DataSchool
print(userStr[::-1]) # loohcSataDesaBoreZ
print(userStr[-5:-3]) # ch

🧾출력

Zero
Base
DataSchool
loohcSataDesaBoreZ
ch

📌데이터길이 len()

  • 데이터의 크기(갯수)를 반환해준다
  • 문자열의 경우, 문자의 갯수를 반환
  • 컨테이너형의 경우, 내부 데이터의 갯수
    (출처:제로베이스데이터스쿨)

📝입력

userStr = 'ZeroBaseDataSchool'
print(len(userStr))

print(len([1, 2, [3, 4, 5], 4, 5]))

🧾출력

18
5

📌리스트와 반복문

리스트와 for문

  • for문을 이용하여 리스트의 아이템조회 자동으로 조회할 수 있다
    (출처:제로베이스데이터스쿨)

📝입력

userStr = [1, 2, 3, 5, [1, 2, 3], [4, 5, 6]]
for s in userStr:
    print(s)

🧾출력

1
2
3
5
[1, 2, 3]
[4, 5, 6]

컨테이너 안에 컨테이너가 있는 경우, 해당 컨테이너 아이템을 지정하고 인덱싱을 수행한다

📝입력

minScore = 60
scores = [
    ['국어', 58],
    ['수학', 78],
    ['영어', 23],
]

for item in scores:
    if item[1] < minScore:
        print(f'과락 과목: {item[0]}, 점수: {item[1]}')

🧾출력

과락 과목: 국어, 점수: 58
과락 과목: 영어, 점수: 23

리스트와 while문

  • 다양한 방법으로 리스트를 조회할 수 있다
    (출처:제로베이스데이터스쿨)

📝입력

studentCnts = [
    [1, 19],
    [2, 20],
    [3, 22],
    [4, 18],
    [5, 21],
]

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

🧾출력

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

📌enumerate()

  • 인덱스와 아이템을 한번에 조회

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']

for idx, value in enumerate(sports):
    print('{} : {}'.format(idx, value))

🧾출력

0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']
print('보기 : {}'.format(sports))
favoriteSport = input('가장 좋아하는 스포츠 입력 : ')
for idx, value in enumerate(sports):
    if value == favoriteSport:
        print('{}(은)는 {}번 째에 있습니다'.format(value, idx+1))

🧾출력

보기 : ['농구', '수구', '축구', '마라톤', '테니스']
가장 좋아하는 스포츠 입력 : 축구
축구()3번 째에 있습니다

📌리스트에 아이템 추가

리스트에 아이템 추가 list.append(data)

  • 존재하는 리스트의 마지막 열에 아이템을 추가한다

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']
print('스포츠 기존목록 : {}'.format(sports))
addSport = input('추가할 스포츠 입력 : ')
sports.append(addSport)
print('스포츠 추가목록 : {}'.format(sports))

🧾출력

스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']
추가할 스포츠 입력 : 야구
스포츠 추가목록 : ['농구', '수구', '축구', '마라톤', '테니스', '야구']

특정위치에 아이템 추가 list.insert(idx, data)

  • 리스트의 원하는 인덱스에 아이템을 추가한다

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']
print('스포츠 기존목록 : {}'.format(sports))
addSport = input('추가할 스포츠 입력 : ')
addSport_idx = int(input('추가할 위치 : '))
sports.insert(addSport_idx, addSport)
print('스포츠 추가목록 : {}'.format(sports))

🧾출력

스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']
추가할 스포츠 입력 : 야구
추가할 위치 : 2
스포츠 추가목록 : ['농구', '수구', '야구', '축구', '마라톤', '테니스']

📌아이템 삭제

list.pop(idx)

  • 해당하는 위치의 아이템을 삭제한다
  • 인수를 넣지 않으면 마지막 아이템을 삭제한다
  • 삭제한 아이템을 반환할 수 있다

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']
print('스포츠 기존목록 : {}'.format(sports))
# delSport = input('추가할 스포츠 입력 : ')
delSport_idx = int(input('제거할 위치 : '))
delSport = sports.pop(delSport_idx)
print('스포츠 삭제 후 목록 : {}'.format(sports))
print('스포츠 삭제내역 : {}'.format(delSport))

🧾출력

스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']
제거할 위치 : 1
스포츠 삭제 후 목록 : ['농구', '축구', '마라톤', '테니스']
스포츠 삭제내역 : 수구

del list[]

  • 해당하는 위치의 아이템을 삭제한다

📝입력

students = ['유재석', '박찬호', '유재석', '강호동', '유재석']
print('변경 전 : {}'.format(students))
del students[0]
print('변경 후 : {}'.format(students))

🧾출력

변경 전 : ['유재석', '박찬호', '유재석', '강호동', '유재석']
변경 후 : ['박찬호', '유재석', '강호동', '유재석']

아이템 삭제 list.remove(data)

  • 해당하는 아이템을 삭제한다

📝입력

sports = ['농구', '수구', '축구', '마라톤', '테니스']
print('스포츠 기존목록 : {}'.format(sports))
delSport = input('추가할 스포츠 입력 : ')
delete = sports.remove(delSport)
print('스포츠 삭제 후 목록 : {}'.format(sports))

🧾출력

스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']
추가할 스포츠 입력 : 수구
스포츠 삭제 후 목록 : ['농구', '축구', '마라톤', '테니스']

📌리스트확장 덧셈연산자(+), extend(list1, list2)

  • 리스트끼리 연결한다

📝입력

sports1 = ['농구', '수구', '축구']
sports2 = ['마라톤', '테니스']
print('덧셈 연산자를 활용한 방법')
print('스포츠 기존목록 : {}'.format(sports1 + sports2))
print()

print('extend 함수를 활용한 방법')
sports1.extend(sports2)
print('스포츠 기존목록 : {}'.format(sports1))

🧾출력

덧셈 연산자를 활용한 방법
스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']

extend 함수를 활용한 방법
스포츠 기존목록 : ['농구', '수구', '축구', '마라톤', '테니스']

📌리스트정렬함수 list.sort(), sorted(list)

  • list.sort(reverse=True/False)는 반환값X, 리스트 정렬을 수행하는 함수
  • sorted(list, reverse=True/False)는 정렬된 데이터를 리스트형으로 반환함
  • reverse=True는 생략가능

📝입력

userList = ['a', 'c', 'b', '2', '1']
print('list.sort()')
print('오름차순')
userList.sort()
print(userList)
print()

print('sorted()')
print('내림차순')
userList.sort(reverse=True)
print(userList)
print()

print('오름차순 : {}'.format(sorted(userList)))
print('내림차순 : {}'.format(sorted(userList, reverse=True)))

🧾출력

list.sort()
오름차순
['1', '2', 'a', 'b', 'c']

sorted()
내림차순
['c', 'b', 'a', '2', '1']

오름차순 : ['1', '2', 'a', 'b', 'c']
내림차순 : ['c', 'b', 'a', '2', '1']

📌리스트뒤집기 list.reverse()와 list[::-1]

  • 리스트끼리 연결한다

📝입력

students = ['홍길동', '박찬호', '이용규', '강호동', '유재석']
print('슬라이싱을 이용한 뒤집기')
print('students: {}'.format(students[::-1]))
print()

print('list.reverse()')
students.reverse()
print('students: {}'.format(students))

🧾출력

슬라이싱을 이용한 뒤집기
students: ['유재석', '강호동', '이용규', '박찬호', '홍길동']

list.reverse()
students: ['유재석', '강호동', '이용규', '박찬호', '홍길동']

📌아이템 위치 찾기 list.index()

  • 해당 아이템의 인덱스를 반환한다

📝입력

students = ['홍길동', '박찬호', '이용규', '강호동', '유재석']
print(f'보기 : {students}')
findStudent = input('검색할 이름 : ')
find_idx = students.index(findStudent)
print(f'{findStudent}{find_idx}번 인덱스에 있습니다')

🧾출력

보기 : ['홍길동', '박찬호', '이용규', '강호동', '유재석']
검색할 이름 : 박찬호
박찬호는 1번 인덱스에 있습니다

index(data, a, b)로 범위설정

  • 해당 범위를 벗어나면 오류 발생

📝입력

students = ['홍길동', '박찬호', '이용규', '강호동', '유재석']
print(f'보기 : {students}')
findStudent = input('검색할 이름 : ')
find_idx = students.index(findStudent, 2, 4)
print(f'{findStudent}{find_idx}번 인덱스에 있습니다')

🧾출력

보기 : ['홍길동', '박찬호', '이용규', '강호동', '유재석']
검색할 이름 : 이용규
이용규는 2번 인덱스에 있습니다

📌아이템 갯수확인 list.count()

  • 인수에 해당하는 아이템의 갯수를 반환한다

📝입력

students = ['유재석', '박찬호', '유재석', '강호동', '유재석']
print(f'보기 : {students}')
findStudent = input('검색할 이름 : ')
countStudent = students.count(findStudent)
print(f'{findStudent}이라는 이름은 {countStudent}개 있습니다')

🧾출력

보기 : ['유재석', '박찬호', '유재석', '강호동', '유재석']
검색할 이름 : 유재석
유재석이라는 이름은 3개 있습니다

📝입력

import random

types_list = ['A', 'B', 'O', 'AB']

types = random.choices(types_list, k=10)
print(types); print(type(types))

for data in types_list:
    print(f'{data}{types.count(data)}개 이다')

🧾출력

['B', 'O', 'AB', 'B', 'AB', 'O', 'AB', 'B', 'O', 'A']
<class 'list'>
A는 1개 이다
B는 3개 이다
O는 3개 이다
AB는 3개 이다

0개의 댓글