[1~19] 자료구조(리스트)

이재은·2024년 5월 19일

1강.

1. 자료구조란?

1) 컨테이너 자료형(여러개의 데이터가 묶여 있는 자료형)의 데이터 구조
리스트, 튜플, 딕셔너리, 세트

  • 튜플 : 수정 불가
  • 세트 : 중복 데이터 불가(입력해도 결과물은 중복된거 제거후 출력)
students (레퍼런스 변수) = []

for student in students :
	print(student)

2강.

2. 리스트

1) [ ]로 선언
2) 데이터(아이템, 요소)은 ,로 구분
3) 숫자, 문자(열), 논리형 등 모든 기본 데이터 같이 저장 가능
4) 리스트에 또 다른 컨테이너 자료형 데이터 저장 가능

3강.

2-1. 리스트 인덱스

1) 각각 데이터를 원할 때 (리스트 아이템)
2) 개별의 type은 숫자면 int나 float 등 본연의 type으로 출력

4강.

2-2. 리스트 길이

1) 리스트 길이 = 리스트에 저장된 아이템 개수
2) len()과 반복문을 이용하면 리스트 아이템 조회가 가능

#리스트 길이가 엄청 길수도 있음
students = ['a','b','c', 'd', 'e']
len(students)
for i in range(len(students)) #range 까먹지 말기 :
    print(i, students[i])
#while문으로 
n = 0
sLength = len(students)

while n < sLength :
    print(n, students[n])
    n+=1
#len 함수 str에도 가능!
str = 'Hello python'
len(str)  = 14

5강.

2-3. 리스트와 for문 (주로)

for문 이용시 리스트 아이템 자동으로 참조 가능
1) in 뒤 : 숫자 범위 또는 iterable 객체
2) 리스트 내부에 또 다른 리스트의 아이템을 조회할 수 있음
ex) 변수 두개 지정시 알아서 할당

students = [[1, 19], [2, 20], [3, 22]]

#1. 
for i in range(len(students)) :
    print(students[i][0], students[i][1])

#2. ★★★
for classNo, cnt in students:
    print(classNo, cnt)

6강.

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

for classNo, cnt in students:
    print(cnt)

for item in students:
    print(item[1])
    
결과 : 18 / 19 / 23 / 21 / 20 (리스트 식으로 x 그냥 하나씩 나옴)
#★★ 변수만들어서 변수값 새로 지정해주기

students = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20]]
minclassNo = 0; maxclassNo = 0
minCnt = 0; maxCnt = 0

for classNo, cnt in students:
    if minCnt = 0 or minCnt > cnt :
        minclassNo = classNo
        minCnt = cnt
    
    if maxCnt < cnt :
        maxclassNo = classNo
        maxCnt = cnt
    
print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minclassNo, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)'.format(maxclassNo, maxCnt))

5강.

2-4. 리스트와 while

9강.

2-5. enumerate

1) 인덱스와 아이템 조회를 한꺼번에
2) 문자열에도 적용 가능

10강.

2-6. 마지막 아이템 추가

1) 변수.append('추가내용')
2) 추가내용에 [1, 2]같은 또다른 리스트도 가능

11강.

2-7. 특정 인덱스 위치에 아이템 추가

1) 변수.insert(위치, '추가내용')

#쌤
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = int(input('숫자 입력: '))
insertId = 0
for idx, number in enumerate(numbers):
    if insertId = 0 and number > inputNumber : 
        #insertId = 0은 더이상의 반복 막는법
        insertId = idx #그 number의 자리에 들어가기
        
numbers.insert(idx-1, inputNumber)
print(numbers)

#내가 한것
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = int(input('숫자 입력: '))

for idx, number in enumerate(numbers):
    if number > inputNumber :
        numbers.insert(idx-1, inputNumber) #틀림 idx에 들어가야
        print(numbers)
        break

12강.

2-8. 아이템 삭제

1) 마지막 삭제 : 변수.pop()
2) 특정부분 삭제 : 변수.pop(위치)
1~2를 변수로 받아서 print하면 삭제한 내용 알수 있음

playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore : {}'.format(playerScore))

minScore = 0; maxScore = 0
minScoreIdx = 0; maxScoreIdx = 0 #idx 초기값 설정

for idx, score in enumerate(playerScore):
    if idx == 0 or minScore > score: #idx=0있어야 하나는 불러올수 있음
        minScoreIdx = idx
        minScore = score

print('minScore:{}, minScoreIdx : {}'.format(minScore, minScoreIdx))

playerScore.pop(minScoreIdx)
print('playerScore : {}'.format(playerScore))

for idx, score in enumerate(playerScore):
    if maxScore < score:
        maxScoreIdx = idx
        maxScore = score

print('maxScore:{}, maxScoreIdx : {}'.format(maxScore, maxScoreIdx))

playerScore.pop(maxScoreIdx)
print('playerScore : {}'.format(playerScore))

13강.

2-9. 특정 아이템 삭제

1) 변수.remove('삭제 내용')
2) remove는 한개 아이템만 삭제 가능. 2개이상이라면 while문 이용

#while 조건식:

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

print(students)

3) (19강) del 리스트[번호] : 역시 하나씩 삭제

del students[1] / del students[1:4]
del students[2:]

14강.

2-10. 리스트에 또다른 리스트 연결

1) 변수1.extend(변수2) : 1에 2가 추가됨
2) + : 새로운 리스트 생성(새로 변수지정해주기)

result = []

for number in addList :
    if number not in result:
        result.append(number)
print(result)

15강.

2-11. 아이템 정렬(크기 비교되는건 가능)

1) 오름 = 변수.sort()
2) 내림 = 변수.sort(reverse = True)
-숫자에서 오름차순 : 작은~큰순

16강.

2-12. 순서 뒤집기

1) 변수.reverse()

17강.

2-13. 인덱스슬라이싱

1) [2:4] = 2~3
2) ★ 음수 슬라이싱

numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}'.format(numbers[2:-2])) #0.12 ~ 35
print('numbers: {}'.format(numbers[-5:-2])) #7 ~ 35

3)문자도 슬라이싱 가능

str = 'abcdefghijklmnopqrstuvwxyz'
print('str length: {}'.format(len(str)))
print('str: {}'.format(str))
print('str: {}'.format(str[2:4]))

#결과값은 str
  1. 슬라이싱 단계 설정

  1. 슬라이싱 이용해 아이템 변경
    1) =할당 연산자 이용
    2) slice(2, 3) 함수

18강.

2-14. 리스트 곱셈

1) 아이템의 개수가 늘어나는 것

2-15. 아이템 위치 찾기

1) 변수.index(item) : item의 인덱스

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

searchIdx = students.index('강호동' , 2, 6) : 2~6까지
print(searchIdx)

19강.

2-16. 특정 아이템의 개수

1) 변수.count('강호동') : 강호동의 개수

#random.randrange
import random

types = ['A', 'B', 'AB', 'O']
todayData = []
typeCnt = []

for i in range(100):
    type = types[random.randrange(len(types))] #0, 1, 2, 3, 중 하나
    todayData.append(type)

print('todayData : {}'.format(todayData))
print('todayData length : {}'.format(len(todayData)))

for type in types :
    print('{}형 : {}개'.format(type, todayData.count(type)))
profile
Dare to be an optimist

0개의 댓글