230424_제로베이스_데이터스쿨_자료구조_04018~04038

김지태·2023년 4월 24일
1
post-thumbnail

04_018 리스트 나머지 기능들 1 / 리스트도 곱셈 연산이 가능하다, 특정 아이템의 인덱스를 찾자

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

index(item) 함수를 이용하면 itme의 인덱스 찾을 수 있음

listName('itemName') -> 이렇게 하면 아이템이 리스트 안에 1개 있든 2개 있든 처음에 나오는 아이템의 인덱스만 출력함

그런데 listName('itemName', 2, 6) 이런식으로 하면 특정 이름의 아이템이 리스트 안에 인덱스2 부터 인덱스6dml 범위 안에 있는 아이템 한 개를 찾아냄. 복수로 찾아내는 것은 아닌듯.

numbers = [2, 50, 0.12, 1, 9 , 2]

s = numbers.index(0.12)

print(s)

k = numbers.index(2, 3, 6)

print(k)

import random
sampleList = random.sample(range(1, 11), 10)

selectIdx = int(input('숫자 7 위치 입력: '))
searchIdx = sampleList.index(7)

if selectIdx == searchIdx:
print('Bingo!')
else:
print('Fail')

print(sampleList)
print(f'Result - selectIdx: {selectIdx} and searchIdx: {searchIdx}')

04_019 리스트 나머지 기능들 2 / 특정 아이템의 개수를 알아내자, 필요 없는 아이템은 삭제하자

특정 아이템 개수 알아내기 - count()

count('아이템 이름') -> 리스트 안에 특정 아이템이 몇 개 있는지 알아냄.

특정 아이템 삭제 -> del()

del('인덱스 번호') -> 리스트 안에 해당 인덱스 값 삭제

del 리스트이름[1:4]

리스트 안에서 인덱스 1부터 4 앞까지 삭제

del 리스트이름[1:]

인덱스 1부터 다 삭제

실습

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

for i in range(100):
type = types[random.randrange(len(types))]
todayData.append(type)

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

for type in types:
print('{}형 \t : {}개'.format(type, todayData.count(type)))

04_020 튜플 / 리스트와 비슷, but 아이템 변경 불가

튜플 -> 소괄호를 사용 / 변경 삭제 등의 수정 불가

04_021 튜플 아이템 조회

인덱스를 이용해서 조회 가능 / 튜플이름[인덱스번호]

04_022 in과 not in 키워드 / 아이템 존재 유/무 판단하기!

import random

randomNumbers = random.sample(range(1, 11), 5)

userNumber = int(input('숫자 입력(확률 50%): '))
if userNumber in randomNumbers: # in 으로 아이템 유무 파악
print('Bingo!')
else:
print('Fail')

print('randomNumbers: {}'.format(randomNumbers))
print('userNumber: {}'.format(userNumber))

04_023 튜플 길이 / 튜플 아이템 개수 확인하자

for i in range(len(students)):
print(i)
print(i, students[i])

n = 0
while n < len(students):
print(n)
print(n, students[n])

for s in students:
print(s)

04_024 튜플 결합

+ 를 통해 두 튜플을 합친 새로운 튜플을 만들 수 있음.

extend() 튜플에서 수정 불가

04_025 튜플 슬라이싱 원하는 아이템만 뽑아내자

리스트와 마찬가지 [n:m] 를 이용하자. n 부터 m-1까지

튜플은 슬라이싱을 통해 아이템을 변경할 수는 없다.

그러나 리스트의 아이템을 튜플의 형태로 변경하는 것은 가능하다.

04_026 리스트와 튜플 / 비슷하지만 다른 리스트와 튜플

리스트와 튜플의 차이점 - 튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다.

튜플은 선언시 괄호 생략 가능

예시 - students = 'kimjitae', 'kimjiyoung', 'kimsuyoen'

리스트와 튜플은 자료형 변환이 가능하다 / 튜플에서 리스트로, 리스트에서 튜플로 변환 가능!!!

04_027 튜플 아이템 정렬 - 튜플도 리스트처럼 정렬할 수 있을까?

튜플은 수정 불가하기 때문에 리스트로 변환 후 수정하자

리스트 변형 후 sort() 사용 / 혹은 바로 sorted() 로 리스트로의 변환과 아이템 정렬을 동시에 할 수도 있다.

04_028 튜플과 for 문 1 / for 문을 이용해 튜플 아이템을 참조하자

참조 = 조회 랑 비슷함.

cars = (튜플 목록, ...)

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

for car in cars:
print(car)

for 문을 통한 튜플 조회

studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21) # 튜플 안에 튜플

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

for i in range(len(studentCnts)):
print('{}학급 학생수: {}'.format(studentCnts[i][0], studentCnts[i][1]))

04_029 튜플과 for 문 2 / for 문의 다양한 기능을 튜플과 사용하기

studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

minClassNo = 0 ; maxClassNo = 0
minCnt = 0 ; maxCnt = 0

for classNo, cnt in studentCnts:
if minCnt == 0 or minCnt > cnt:
minClassNo = classNo
minCnt = cnt

if maxCnt < cnt :
maxClassNo = classNo
maxCnt = cnt

print('least students class {} / {}'.format(minClassNo, minCnt))
print('most students class {} / {}'.format(maxClassNo, maxCnt))

04_030 튜플과 while 문 1

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

n = 0
while n < len(cars):
print(cars[n])
n += 1

n = 0
flag = True
while flag:
print(cars[n])
n += 1

if n == len(cars):
flag = False

n = 0
while True:
print(cars[n])
n += 1

if n == len(cars):
break

studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

n = 0

while n < len(studentCnts):
print('{}반 학생수: {}'.format(studentCnts[n][0], studentCnts[n][1]))

n += 1

04_031 튜플과 while문 2 / while문을 이용한 아이템 참조

studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

minClassNo = 0 ; maxClassNo = 0
minCnt = 0 ; maxCnt = 0

n = 0

while n < len(studentCnts):

if minCnt == 0 or minCnt > studentCnts[n][1]:
  minClassNo = studentCnts[n][0]
  minCnt = studentCnts[n][1]

if maxCnt < studentCnts[n][1] :
  maxClassNo = studentCnts[n][0]
  maxCnt = studentCnts[n][1]

n += 1

print('least students class {} / {}'.format(minClassNo, minCnt))
print('most students class {} / {}'.format(maxClassNo, maxCnt))

04_032 딕셔너리 / 키를 이용해서 자료구조를 다루자

키와 벨류를 통해 자료를 관리한다. / { } 사용

04_033 딕셔너리 조회

딕셔너리_이름['키 값'] -> 해당 키의 벨류 값을 조회할 수 있다. / 해당 키에 대한 벨류가 리스트 형태인경우 dict['s3'][0] 이런식으로 대괄호를 연속으로 써서 조회 가능!

get 을 통한 조회는 해당하는 벨류 값이 없어도 오류가 뜨지 않고 none 이 뜬다.

students.get('s6') -> get 함수로 딕셔너리 조회

04_034 딕셔너리 추가 / 키를 이요해서 아이템 추가

" 딕셔너리이름[키 이름] = 벨류 이름 " 이런식으로 아이템 추가

myInfo['name'] = 'Kim Jitae' name이라는 키 값과 Kim Jitae라는 벨류 값 추가

factorialDic = {}

for i in range(11):
if i == 0:
factorialDic[i] = 1
else:
for j in range(1, (i+1)):
factorialDic[i] = factorialDic[i-1] * j

print(f'factorialDic : {factorialDic}')

04_035 딕셔너리 수정 / 키를 이용해서 벨류 수정하기

" 딕셔너리이름[키 이름] = 벨류 이름 " 이런식으로 아이템 수정

myInfo['name'] = 'Denny' name이라는 키 값과 Kim Jitae라는 벨류 값을 Denny 라는 벨류 값으로 변경

04_036 keys(), values() / 전체 키와 벨류 조회

keys() 키 값만 모아서 보여줌 / values() 는 벨류 값만 모아서 보여준다. items()는 키, 벨류를 한꺼번에 튜플 형태로 갖고온다.

for key in memInfo.keys():

print(key, memInfo[key]) -> 이렇게 for 문 활용

04_037 딕셔너리 삭제 / del과 pop() 으로 아이템 삭제

del 딕셔너리이름('키 값 이름') / 딕셔너리이름.pop('키 값 이름') -> 삭제 방법

del 은 그냥 삭제하는데, pop는 함수라 삭제한 값이 반환 값이 된다.

04_038 딕셔너리 유용한 기능 / in, len, clear()

in, not in -> 키 존재 유무 판단 -> True, False로 반환

len -> 아이템 개수 / 아이템은 키, 벨류 한 쌍 단위

clear() -> 모든 아이템 삭제

profile
데이터 분석가

0개의 댓글