관리 메뉴

ilovechoonsik

[STARTERS 4기 TIL] 파이썬 기초 (230206) 본문

STARTERS 4기 🚉/TIL 👶🏻

[STARTERS 4기 TIL] 파이썬 기초 (230206)

춘시기좋아 2023. 2. 7. 09:22

 

📖 오늘 내가 배운 것

 

1. 파이썬 데이터분석 소개

2. 파이썬 시작하기

  2.1 기본자료형과 변수

  2.2 산술연산, 문자열연산

  2.3 문자열 다루기

  2.4 반복문

  - 조건에 따라 분기하기(if)

  - 횟수로 반복하기(for)

  - 조건으로 반복하기(while)

  - 알고리즘 연습하기

  2.5 리스트와, 튜플 만들기

  2.6 인덱싱과 슬라이싱

  2.7 리스트 변경하기 (추가,수정,삭제)

  2.8 리스트 활용

  2.9 연습 문제

 


1. 파이썬 데이터 분석 소개

1.1 데이터 분석

데이터 분석 : 데이터를 정리하고, 변환하고, 조작하고, 검사함으로써 지저분한 원시 데이터에서 유용한 인사이트를 도출하는 작업

 

데이터 분석가 :  조직이 더 나은 비지니스 의사결정을 할 수 있도록 데이터를 사용해 돕는 역할을 합니다. 수많은 데이터를 정리하고, 유용한 정보를 추출하고 데이터 분석에 기초하여 결정을 내려서 인사이트를 도출해 전달

 

데이터 분석 목적 : 수집 데이터를 가공하여 정보로 만들고 > 정보와 지식을 결합하여 새로운 지식을 만들고 > 지식에 아이디어 결합하여 창의적인 산물 만들고 > 새로운 가치를 창출

 

1.2 데이터와 정보

구분 내용 예시
데이터 객관적 사실을 수집하여 모아놓은 자료 블로그 방문기록
정보  데이터 가공하여 의미 도출된 것 일일 방문자 수, 성별 방문자 수, 시간대별 방문자 수
지식 정보에 개인적 경험을 결합시킨 새로운 지식 방문자가 많은 성별/나이에 대한 원인 파악
지혜  지식에 아이디어가 결합된 창의적 산물 방문자가 많은 성별/나이를 타겟으로 운영 전략 수립

 

1.3 데이터 분석 절차

데이터 분석 절차 (ABLEARN)

(1) 데이터 분석 기획

  • 문제 정의 : 해결해야 할 문제 정의
  • 데이터 정의 : 분석에 필요한 데이터 속성 정의
  • 분석 목적 : 현상 파악/원인 분석/추세분석 및 예측

# 데이터 속성이란? : 데이터의 구체적인 정보 항목으로 더 이상 분리될 수 없는 최소의 데이터 보관 단위

ex) 온난화 현상을 파악을 위해 필요한 데이터 속성 : 연도별 평균기온

 

(2) 데이터 수집

  • 기업의 데이터베이스 (일반인 접근 x)
  • 공공데이터
  • 민간데이터 (유료/무료)
  • 웹스크래핑
  • 설문
  • 센서 데이터

#공공 데이터란? : 국가의 다양한 데이터를 공공데이터법에 따라 개방하여 국민들이 보다 쉽고 용이하게 활용할 수 있도록 제공하는 데이

 

(3) 데이터 전처리

수집한 데이터는 바로 분석하기 힘들 수 있다! 이에 데이터를 분석하기 알맞게 정재하고 가공 (분석에서 가장 많은 시간 소요)

  • 필요한 속성만 추출 : 불필요한 컬럼 제거
  • 조건에따라 데이터 추출 : 최근 ~년 데이터만 추출
  • 결측치 식별/처리 : 버이었는 값, 신뢰도 떨어질 수 있다.
    • 대표값으로 대치 : 중간값, 최빈값, 평균값
    • 주변값으로 대치 : 이전값, 다음값
    • 결측치 삭제 : 결측치 존재하는 행 삭제, 결측치 많은 열 삭제
  • 이상값 식별/처리 : 이상치는 보통 제거! (그래프 그려서 튀는 값 있는지 확인)
  • 자료형 변경 : 숫자로 처리해야 하는 데이터가 문자형 존재, 시계열 데이터가 문자형으로 되어 있는 경우
  • 테이블 형태 변경 
    • 행/열 변경
    • 컬럼명/인덱스 변경
    • 새로운 속성 추가
    • 여러 데이터 연결
    • (어떤 통계값 사용한다면) 데이터 그룹핑

 

(4) 데이터 탐색/시각화

  • 통계적 특성 이해, 시각화
  • 데이터에 대한 이해!

 

(5) 데이터 해석

  • 인사이트 도출 : 현상 파악, 원인 도출, 추세를 파악/예측

 

2. 파이썬 기초

2.1 기본자료형과 변수

  • 기본 자료형
    • 정수형 int
    • 실수형 float
    • 문자열형 string
    • 부울형 bool

 

  • 변수란? : 데이터가 저장되는 메모리 공간
    • 규칙 : 영문,숫자, _만으로 구성
    • 대문자 소문자를 구분
    • 중간에 공백 존재하면 안 됨
    • 문자나 밑줄로 시작해야 함
    • 예약어는 변수명으로 사용할 수 없음 (파이썬 문법에 사용되는 단어)
    • 역할을 짐작하기 쉬운 이름 설정

 

2.2 산술연산, 문자열연산

(1) 산술연산

a, b = 3,4

print('a+b=',a+b) # 더하기
print('a-b=',a-b) # 빼기
print('a*b=',a*b) # 곱셈
print('a/b=',a/b) # 나눗셈
print('a//b=',a//b) # 나눗셈 - 몫
print('a%b=',a%b) # 나눗셈 - 나머지
print('a**b=',a**b) # 거듭제곱

''' 결과
a+b= 7
a-b= -1
a*b= 12
a/b= 0.75
a//b= 0
a%b= 3
a**b= 81
'''
  • 산술연산의 우선순위는 수학에서와 동일한 규칙을 갖는다

 

(2) 문자열 연산

# 문자열 더하기(문자열 연결하기)
a = 'good'
b = 'morning'
a+b
### goodmorning


# 문자열 곱하기(문자열 반복하기) 
s = 'ha'
s * 3
### 'hahaha'


# 문자열과 숫자형 더하기
english = 80
result = '영어점수'+ str(english)
print(result)
### 영어점수80

# 주의할 점: 문자열 덧셈 연산 시 데이터 형은 모두 문자형이어야 함

 

(3) 복합할당연산자

 

(4) f스트링으로 변수값 출력하기

print(f'나이는 {age}살이시군요. 내년이면 {age+1}살이 되시겠네요')
### 나이는 20살이시군요. 내년이면 21살이 되시겠네요

a = int(input('첫번째숫자:'))
b = int(input('두번째숫자:'))
print(f'{a}+{b}={a+b}')
### 1+3=4

문자 사이에 변수값 쉽게 출력 가능

 

(5) 연습문제

#화씨 온도를 입력받아 섭씨 온도로 변환하는 프로그램을 작성해보세요.
#𝐶=(𝐹−32)∗59

# 화씨온도 입력
# 온도는 보통 실수형으로 사용되기 때문에 float으로 받아야 함!
F = float(input("화씨 온도를 입력하세요 : "))

# 섭씨온도로 계산
C = (F-32) * (5/9)

# 결과 출력
print(f'화씨 온도: {F} --> 섭씨 온도 :{C}')

 

2.3 문자열 다루기

(1) 문자열 인덱스

: 문자의 자리 번호

 

(2) 문자열 슬라이싱

: 문자열의 일정 범위를 추출하는 작업 - 문자열[시작인덱스 : 끝 인덱스 : 간격]

- 양,음수로 추출

a = 'Hello World'

print(a[0:5]) # 'Hello' 출력하기
print(a[6:11]) # 'World' 출력하기
'''
Hello
World
'''

print(a[-11:-6]) # 'Hello' 출력하기
print(a[-5:]) # 'World' 출력하기
'''
Hello
World
'''

 

- 첫, 끝 인덱스 생략 가능

a = 'Hello World'

# 'Hello'
print(a[:5])

# 'World'
print(a[6:])

# 'Hello World'
print(a[:])


'''
Hello
World
Hello World
'''

 

- 한문자씩 건너뛰어 출력하기 a[::2]

a = 'Hello World'
print(a[::2])

# HloWrd

 

- 역순으로 출력 : 간격을 마이너스(-)로 하면 역순으로 출력된다. a[::-1]

a = 'Hello World'
print(a[::-1])

# dlroW olleH

 

(3) 문자열 함수

- find(찾을 문자열) 

: 찾을 문자열 시작 인덱스 찾기

a = 'Hello, Python!!!'

# 'e'의 위치 찾기
print(a.find('e'))

# 'l'의 위치 찾기
print(a.find('l'))


###1
###2

 

- replace(찾을 문자열, 교체할 문자열)

: 찾을 문자열을 교체할 문자열로 바꾸기

a = '나는 초코우유 좋아. 초코우유 최고'

# '초코'-->'딸기'로 교체
print(a.replace('초코','딸기'))


###나는 딸기우유 좋아. 딸기우유 최고

 

- lower(), upper()

: 문자열 모두 소/대문자로 바꾸기

a = 'Hello, Python!!!'

a.lower() # 소문자로!
###'hello, python!!!'

a.upper() # 대문자로!
###'HELLO, PYTHON!!!'

 

- split('구분자')

: 문자열을 구분자 기준으로 나누기 : 결과 list로 반환

phone = '010-123-4567'
phone.split('-')
###['010', '123', '4567']


email = 'abc@naver.com'
email.split('@')
###['abc', 'naver.com']

 

(4) 연습 문제

  • 사용자의 영문 이름을 입력받아 성과 이름 순서를 바꾸어서 출력하는 프로그램을 작성하세요.
  • 성과 이름은 공백으로 구분합니다.
# 사용자의 영문이름 입력받기 (성과 이름은 공백으로 구분)
full_name = input('영문이름(성, 이름 공백으로 구분): ')

# 공백의 위치 찾기 -> find
space = full_name.find(' ')

# 성, 이름을 슬라이싱하여 각각 변수에 담기
first_name = full_name[:space]
last_name = full_name[space+1:] # 공백 다음부터 시작!

print(last_name, first_name)


'''
영문이름(성, 이름 공백으로 구분): kim minsu
minsu kim
'''

 

2.4 반복문

(1) 프로그램의 3가지 기본 제어 구조

  • 순차구조 : 코드를 작성한 순서에 따라 명령어들이 순차적으로 실행
  • 선택구조 : 조건에 따라 명령을 선택하여 실행하는 구조
  • 반복구조 : 동일한 명령이 반복되면서 실행되는 구조
  • 들여쓰기 : 파이썬에서는 들여쓰기로 코드를 묶어준다. 들여쓰기 간격은 같아야 한다.

 

(2) if - 조건에 따라 분기하기

- if : 조건 만족할 때 명령 실행

 

- if, else : 조건을 만족할 때, 만족하지 않을 때로 분기

 

- if, elif : 여러 개의 조건 중 만족하는 조건 찾아서 실행 분기

: 조건식 결과가 True = 해당 문장 실행 후 다음 조건식 검사하지 않고 바로 조건문 빠져나옴

# 점수를 입력받고 점수의 범위에 따라 등급을 출력하는 프로그램을 작성하세요.
#등급	 A	   B	   C	   D	  F
#점수	 90이상	80~89	70~79	60~69	0~59

score = int(input('점수:'))
if score>=90:
    grade='A'
elif score>=80:
    grade='B'
elif score>=70:
    grade='C'
elif score>=60:
    grade='D'
else:
    grade='F'

print('grade:',grade)

 

- 연습문제

# 짝수/홀수로 나뉘기 때문에 if/else로 작성
# 근데 0은? 홀수/짝수가 아니기 때문에 elif로 조건에 추가

num = int(input('정수:'))

if num%2 == 1:
    print('홀수')
elif num==0:
    pirnt(0)
else:
    print('짝수')
    
    
###정수:3
###홀수

 

(3) for - 횟수로 반복하기

- for? : 시퀀스를 순회할 때 주로 사용되는 반복 구조

- 시퀀스 : 여러 값이 연속적으로 이어진 자료 : 리스트 튜플 문자열 

 

for i in [1,2,3,4,5]:
    print(i)
'''
1
2
3
4
5
'''
    
for i in 'python':
    print(i)
'''    
p
y
t
h
o
n    
'''

for i in range(5): #0,1,2,3,4
    print(i)
'''    
0
1
2
3
4
'''

 

- range 함수

 

- 중첩반복구조

  • 내부 for문을 외부 for문의 시퀀스만큼 반복한다.
  • 내부루프와 외부루프는 동일한 제어변수를 사용해서는 안된다.
# 가로로 1단씩 출력 -> 2-9까지 고정시켜 놓고, 1~9까지 돌려야 함
# 내부 2,10 / 외부 1,10
for i in range(2,10):
    for j in range(1,10):
        print(f'{i}*{j}={i*j}', end='\t') #간격 맞추기 위해 \t로 탭
    print() #한 단이 끝나면 줄 바꿈
'''
2*1=2	2*2=4	2*3=6	2*4=8	2*5=10	2*6=12	2*7=14	2*8=16	2*9=18	
3*1=3	3*2=6	3*3=9	3*4=12	3*5=15	3*6=18	3*7=21	3*8=24	3*9=27	
4*1=4	4*2=8	4*3=12	4*4=16	4*5=20	4*6=24	4*7=28	4*8=32	4*9=36	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	5*6=30	5*7=35	5*8=40	5*9=45	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	6*7=42	6*8=48	6*9=54	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	7*8=56	7*9=63	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	8*9=72	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81
'''

# 세로로 1단씩 출력 -> 1~10 고정시키고 2~10 돌려야 함
# 외부 (1,10) / 외부 (2,10)
for i in range(1,10):
    for j in range(2,10):
        print(f'{j}*{i}={j*i}', end='\t')
    print()
'''
2*1=2	3*1=3	4*1=4	5*1=5	6*1=6	7*1=7	8*1=8	9*1=9	
2*2=4	3*2=6	4*2=8	5*2=10	6*2=12	7*2=14	8*2=16	9*2=18	
2*3=6	3*3=9	4*3=12	5*3=15	6*3=18	7*3=21	8*3=24	9*3=27	
2*4=8	3*4=12	4*4=16	5*4=20	6*4=24	7*4=28	8*4=32	9*4=36	
2*5=10	3*5=15	4*5=20	5*5=25	6*5=30	7*5=35	8*5=40	9*5=45	
2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	7*6=42	8*6=48	9*6=54	
2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	8*7=56	9*7=63	
2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	9*8=72	
2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
'''

 

- 연습문제

# 1부터 10까지 정수의 합
total = 0
for i in range(1,11):
    total += i
print(total)
# 55

# 1부터 100까지 홀수의 합
total = 0
for i in range(1,101):
    if i%2==1:
        total+=i
print(total)
# 2500

 

(4) while - 조건으로 반복하기

  • 반복문을 사용할 때 범위를 지정할 수 없는 경우, 특정 값이 들어왔을 때 종료하고 싶은 경우 사용

- while 문만 가능한 겨우 : 반복의 횟수가 정해지지 않았을 때!

'q'를 입력할 때까지 반복하여 이름 입력받기
while True:
    name = input('이름:')
    if name=='q':
        break #조건에서 빠져나오기 위해 break 사용
'''
이름:a
이름:b
이름:c
이름:d
이름:f
이름:q
'''

 

- 연습문제

'''
올바른 아이디/비밀번호를 입력할 때까지 아이디와 비밀번호를 입력하는 프로그램 만들기

확장하기
아이디가 잘못되었으면 '아이디를 확인하세요' 출력
비밀번호가 잘못되었으면 '비밀번호를 확인하세요' 출력
입력 횟수가 정해지지 않았기 때문에 while 사용
'''

# 올바른 아이디와 비밀번호
id = 'id123'
pwd = 'pwd123'

while True:
    input_id = input('id:')
    input_pwd = input('pwd:')
    
    if id==input_id and pwd==input_pwd:
        break
    if id!=input_id:
        print('아이디를 확인하세요')
    if pwd!=input_pwd:
        print('비밀번호를 확인하세요.')
        
        
#사용자가 0을 입력할 때까지 숫자을 입력받아 입력받은 숫자들의 합을 구하는 프로그램을 작성하세요
total = 0

while True:
    i = int(input('숫자를 입력하세요! : '))
    if i != 0:
        total += i
    else:
        print(total)
        break

 

(5) 알고리즘 연습하기

- up&down 숫자맞추기 게임

# 1~100 사이의 정답 숫자를 랜덤으로 하나 정하고, 정답 숫자를 맞출 때까지 숫자를 입력하는 게임이다.
# 내가 입력한 숫자가 정답보다 작으면 'DOWN', 정답보다 크면 'UP'을 출력하고 숫자를 다시 입력받는다.
# 정답을 맞추면 '정답!'이라고 출력하고 게임을 끝낸다.

# 조건
# 기회는 5번까지만 주어집니다.
# 5회가 넘으면 '횟수초과' 메시지와 함께 정답을 알려줍니다.
# 정답을 맞추면 몇번째에 맞추었는지 출력합니다.

import random
num = random.randrange(1,101)
cnt = 0

while True:
    cnt += 1
    i = int(input('숫자 입력 : '))
    
    if cnt == 5:
        print(f'횟수 초과! 정답은 : {num}')
        break
    
    if i < num:
        print('UP')
    elif i > num:
        print('DOWN')
    else:
        print(f'정답! {cnt}번만에 맞췄다')
        break
 

- 사칙연산 프로그램

# 두 수와 사칙연산기호(+,-,*,/)을 입력받아 연산 기호에 따라 연산 결과를 출력하는 프로그램을 작성하세요.
# 사칙연산기호(+,-,*,/)가 아닌 경우 '잘못입력하셨습니다' 출력

num1 = int(input('첫 번째 숫자'))
num2 = int(input('두 번째 숫자'))
op = input('사칙연산 기호')

if op=='+':
    print(f'{num1}+{num2}={num1+num2}')
elif op=='-':
    print(f'{num1}-{num2}={num1-num2}')
elif op=='*':
    print(f'{num1}*{num2}={num1*num2}')
elif op=='/':
    print(f'{num1}/{num2}={num1/num2}')
else:
    print('잘못 입력하셨습니다.')
 

- 할인된 금액 계산

# 물건 구매가를 입력받고, 금액에 따른 할인율을 계산하여 구매가, 할인율, 할인금액, 지불금액을 출력하세요.

price = int(input('물건구매가:'))

if price>=100000:
    dc = 10
elif price>=50000:
    dc = 7
elif price>=10000:
    dc=5
else:
    dc=0
    
print(f'''
구매가:{price}
할인율:{dc}
할인금액:{price*(dc/100)}
지불금액:{price-price*(dc/100)}
''')
 

 

2.5 리스트와 튜플

(0) 파이썬 복합 자료형

 

(1) 리스트란?

여러 개의 데이터 값하나의 변수에 담을 수 있는 자료구조

 

- 리스트 만들기

# []를 사용하여 빈 리스트 만들기
l1 = []
### []

# list() 함수를 사용하여 빈 리스트 만들기
l2 = list()
### []

# []를 사용하여 초기값이 있는 리스트 만들기
l3 = [1,3,5,7,9]
### [1,3,5,7,9]

# list() 함수를 사용하여 초기값이 있는 리스트 만들기(규칙이 있는 정수값의 나열)
l4 = list(range(1,100,2))
### [1,3,5,7,9,11,...99]

 

(2) 튜플이란?

- 튜플?

리스트와 동일하지만 튜플은 ()로 둘러쌈

리스트는 값의 생성, 삭제, 수정 가능하지만 튜플은 값을 바꿀 수 없다.

 

- 사용 시점

프로그램이 실행되는 동안 값이 바뀌면 안 되는 경우

함수에 인자를 전달하거나 값을 리턴할 때 사용되는 경우가 많음

 

- 튜플 만들기

# ( )를 사용하여 빈 튜플 만들기
t1 = ()

# tuple() 함수를 사용하여 빈 튜플 만들기
t2 = tuple()

# ( )에 초기값 지정하여 튜플 만들기
# 튜플을 만들 때 괄호()를 생략할 수 있다.
t3 = (1,3,5,7,9)
t4 = 1,3,5,7,9

# 항목이 1개일 때는 ,를 붙인다.
t5 = (1,)
t6 = 1,
###(1,)

# tuple() 함수를 사용하여 초기값이 있는 튜플 만들기(규칙이 있는 정수값의 나열)
t7 = tuple(range(1,100,2))
###(1,3,5,7,...99)
 

(3) 리스트, 튜플 자료형

- 모든 자료형 혼합되어 들어갈 수 있다.

list1 = ['amy',20,165.5, ['독서','코딩']]
### ['amy', 20, 165.5, ['독서', '코딩']]

tuple1 = ('amy',20,165.5, ['독서','코딩'])
### ('amy', 20, 165.5, ['독서', '코딩'])

 

(4) 리스트, 튜플 연결하기

연결 : +

반복 : *

값 존재하는지 확인 : in, not in

항목의 갯수 : len

 

예시

더보기
# 존재여부 확인
l = [1,2,3,4,5]
t = (1,2,3,4,5)

print(5 in l)
print(10 in l)

print(5 not in l)
print(10 not in l)

'''
True
False
False
True
'''

# 갯수 구하기
l = [1,3,2,4,3,5,7,8,77.7,88.8,'a','b','c',[10,20,30]]
len(l)
### 14

t = ((1,2),[3,4])
len(t)
### 2

 

2.6 인덱싱과 슬라이싱

(1) 인덱싱

- 인덱스?

: 리스트, 튜플의 항목 순서 (0 부터 시작)
: 인덱스를 음수로 지정하면 뒤에서부터 접근 (-1 시작)
 

- 인덱스로 항목 추출

  • 리스트명[인덱스]
  • 튜플명[인덱스]

- 중첩리스트, 튜플 인덱싱

# 아래 리스트 l에서 '수박' 인덱싱하여 가져오기
l2 = ['사과','오렌지','포도',['수박','바나나']]
l2[3][0] # 3번째 중 0번째

# 아래 튜플 t에서 'Life' 인덱싱하여 가져오기
t2 = (1,2,('a','b',('Life','is')))
t2[2][2][0] (2번째 중 2번째 중 0번째)

 

(2) 슬라이싱

- 슬라이싱?

: 리스트 혹은 튜플의 일부를 추출하여 새로운 리스트로 만든다.

 

- 인덱스로 슬라이스

  • 리스트명[시작인덱스:끝인덱스:간격]
  • 튜플명[시작인덱스:끝인덱스:간격]
l1 = ['축구','농구','배구','야구','족구','발야구','피구'] 
# 족발피
l1[-3:]
### ['족구', '발야구', '피구']

# 모든 항목 역순으로
l1[::-1]
### ['피구', '발야구', '족구', '야구', '배구', '농구', '축구']

# ['발야구','족구','야구']
# 역순으로 가져와야 할 때 야구=-4번째, 발야구=-2번째
l1[-2:-5:-1]
### ['발야구','족구','야구']

# 아래 리스트 l3에서 홀수만 슬라이싱하기
l3 = list(range(1,21))
l3[::2]
### [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

 

(3) 항목의 인덱스 찾기

  • 리스트명.index(항목)
  • 튜플명.index(항목) 
t1 = ('스키','보드','스케이트','스케이트보드','수상스키','웨이크보드')

# '스케이트'의 인덱스 찾기
t1.index('스케이트')
### 2

# '오토바이'의 인덱스 찾기
t1.index('오토바이')
### 오류
# 오류 처리?
if '오토바이' in t1:
    print(t1.index('오토바이'))
else:
    print('존재하지 않음')

 

2.7 리스트 변경하기 (추가,수정,삭제)

(1) 추가

  • 리스트명.append(항목) : 리스트 끝에 항목 추가
  • 리스트명.insert(인덱스, 항목) : 리스트 중간에 항목 삽입
  • 리스트명.extend(리스트) : 리스트 끝에 여러 항목 추가
todolist = ['양치','물마시기']

# '아침운동' 항목 추가하기
todolist.append('아침운동')
### ['양치', '물마시기', '아침운동']

# '아침운동'하기 전에 '아침식사'
todolist.insert(2,'아침식사')
### ['양치', '물마시기', '아침식사', '아침운동']

# '아침운동' 후에 ['샤워','드라이','공부']
todolist.extend(['샤워','드라이','공부'])
### ['양치', '물마시기', '아침식사', '아침운동', '샤워', '드라이', '공부']

 

(2) 수정

  • 리스트명[인덱스] = 항목 : 항목 수정
  • 리스트명[시작인덱스:끝인덱스] = 리스트 : 여러 항목 수정
todolist = ['양치', '물마시기', '아침식사', '아침운동', '샤워', '드라이', '공부']

# 아침운동-->산책으로 수정
todolist[3]='산책'
### ['양치', '물마시기', '아침식사', '산책', '샤워', '드라이', '공부']

# '아침식사','산책' --> '독서','산책','아침식사'
todolist[2:4] = ['독서','산책','아침식사']
### ['양치', '물마시기', '독서', '산책', '아침식사', '샤워', '드라이', '공부']

 

(3) 삭제

  • del 리스트명[인덱스] : 인덱스 이용하여 항목 삭제
  • 리스트.remove(항목) : 항목값을 이용하여 삭제 - 항목이 여러개인 경우 앞의 인덱스만 삭제
  • 리스트.pop() : 마지막 항목 반환하고 삭제
todolist = ['양치', '물마시기', '독서', '산책', '아침식사', '샤워', '드라이', '공부']

# 마지막 인덱스 삭제
del todolist[-1]
### ['양치', '물마시기', '독서', '산책', '아침식사', '샤워', '드라이']

# '양치' 삭제
todolist.remove('양치')
['물마시기', '독서', '산책', '아침식사', '샤워', '드라이']

a = todolist.pop()
a
### '드라이'
todolist
### ['물마시기', '독서', '산책', '아침식사', '샤워']

 

(4) 연습문제 

# 아래 wishlist의 '시계','신발'을 myCart로 이동해봅시다.
wishlist = ['가방','시계','신발']
mycart = []

#wishlist의 시계, 신발을 추출해서 mycart에 담는다.
mycart.extend(wishlist[1:3])
mycart
### ['시계','신발']

#wishlist의 시계, 신발을 삭제한다.
del wishlist[1:3]
wishlist
### ['가방']

 

2.8 리스트 활용

(1) 리스트 통계값

  • 항목수 : len(리스트명)
  • 합계 : sum(리스트명) - 모든 항목이 숫자여야 함
  • 최소값 : min(리스트명) - 숫자, 문자 모두 가능하지만 한 가지로 이루어져 있어야 함
  • 최대값 : max(리스트명) - 숫자, 문자 모두 가능하지만 한 가지로 이루어져 있어야 함
  • 항목의 갯수 : 리스트명.count(항목)
l = [1,2,3,4,5,3,4,5]
print('항목수:',len(l))
print('합계:',sum(l))
print('최소값:',min(l))
print('최대값:',max(l))
print('평균:',sum(l)/len(l)) # 평균 구하는 함수는 없음, 직접 구해야 함
print('항목5의 갯수:',l.count(5))


'''
항목수: 8
합계: 27
최소값: 1
최대값: 5
평균: 3.375
항목5의 갯수: 2
'''

 

(2) 리스트 정렬하기

- 원본리스트 정렬

  • 리스트명.sort()
  • 리스트명.sort(reverse=True) : 욕순
friends = ['수지','지은','찬혁','수현','범준']
friends.sort()
### ['범준', '수지', '수현', '지은', '찬혁']

friends.sort(reverse=True)
### ['찬혁', '지은', '수현', '수지', '범준']

 

- 복사본 만들어서 정렬

  • sorted(리스트명)
  • sorted(리스트명, reverse=True) : 역순
friends = ['수지','지은','찬혁','수현','범준']
sorted_friends = sorted(friends)
sorted_friends
###['범준', '수지', '수현', '지은', '찬혁']

friends
['수지', '지은', '찬혁', '수현', '범준']

 

- 리스트 순서 뒤집기

  • 리스트명.reverse() : 순서 뒤집기
friends = ['수지','지은','찬혁','수현','범준']
friends.reverse()
### ['범준', '수현', '찬혁', '지은', '수지']

 

(3) 2차원 리스트 다루기

# 리스트 만들기
l2 = [[10,20,30],[40,50,60]]

'''
	0열	1열	2열
0행	10	20	30
1행	40	50	60
'''


# 30 추출하기
print(l2[0][2]) #0행 2열
###30

# 1행 2열 추출하기
print(l2[1][2])
###30
###60

 

(4) 연습문제

# 파일리스트에서 파일명과 확장자를 분리하여 다음과 같은 형태로 저장하는 리스트를 만들어봅시다.
'''
파일명	확장자
file1	py
file2	txt
file3	pptx
'''

file_list = ['file1.py','file2.txt','file3.pptx']
name_extension = []

for i in file_list:
    #print(i.split('.')) .split 분리 [['file1','py'],...,['file3','pptx']]
    name_extension.append(i.split('.')) #name_extension에 list 1개씩 추가

print(name_extension)
###[['file1', 'py'], ['file2', 'txt'], ['file3', 'pptx']]

 

 

2.9 연습 문제

(1) 과목별 평균 구하기

'''
다음은 학생 별 [국어,영어,수학]점수가 저장된 리스트이다.
score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
각 학생의 세 과목의 성적의 [총점, 평균]을 구하여 리스트에 담으시오.
(평균은 반올림하여 소수점 1자리까지 표현한다.)
'''

score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
stu_scores = []

for i in score_list:    
    total = sum(i)
    average = total/3
    #print([total,rount(average,1)])
    stu_scores.append([total,round(average,1)])
    
stu_scores
###[[260, 86.7], [258, 86.0], [254, 84.7], [254, 84.7], [257, 85.7]]

 

 

(2) 과목별 평균 구하기

'''
다음은 학생 별 [국어,영어,수학]점수가 저장된 리스트이다.
score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
각 과목의 리스트를 분리하고 과목별 평균을 구해봅시다. 평균은 소수점 1자리까지 출력한다.
'''

score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
kor_list=[]
eng_list=[]
math_list=[]

kor_average=0
eng_average=0
math_average=0

#각 과목의 리스트 분리하기
for i in score_list:
    #print(i)
    kor_list.append(i[0])
    eng_list.append(i[1])
    math_list.append(i[2])

print('kor_list:',kor_list)
print('eng_list:',eng_list)
print('math_list:',math_list)

kor_average = sum(kor_list)/len(kor_list)
eng_average = sum(eng_list)/len(eng_list)
math_average = sum(math_list)/len(math_list)

print('kor_average:',round(kor_average,1))
print('eng_average:',round(eng_average,1))
print('math_average:',round(math_average,1))

'''
kor_list: [96, 96, 76, 89, 90]
eng_list: [84, 86, 95, 96, 76]
math_list: [80, 76, 83, 69, 91]
kor_average: 89.4
eng_average: 87.4
math_average: 79.8
'''

 

(3) 랜덤 항목 추출하기

  • random.choice(리스트명)
menulist = ['한식','일식','중식','양식','분식','이탈리아식']
print('오늘은 뭘먹지?')

import random
random.choice(menulist)

'''
메뉴를 입력받아 랜덤으로 메뉴를 정하는 프로그램을 작성해봅시다.
공백('')을 입력할 때까지 메뉴를 입력받습니다.
'''

menulist = []
while True:
    menu = input('메뉴:')
    if menu=='':
        break
    menulist.append(menu)

print('오늘의 메뉴는:',random.choice(menulist))
        
'''
메뉴:치킨
메뉴:피자
메뉴:햄버거
메뉴:
오늘의 메뉴는: 피자
'''
 

#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로

 

Comments