빅데이터 국비 교육

[아이티윌 빅데이터 52기] Day 9 Python Basic | 프로그램 흐름 제어 / 리스트 (1)

datahaseo 2025. 10. 17. 16:33

<학습내용>

-프로그램 흐름 제어

-리스트의 이해

-인덱싱과 슬라이싱

-리스트의 원소 복사

-리스트의 탐색

 

프로그램 흐름 제어

프로그램에서는 조건문과 반복문이 중첩되어 쓰이는 등 특정 조건을 더 상세하게 보는 방법들이 있따

 

if 와 if 의 중첩

#점수를 받아서 패스와 불합격을 나누고, 패스일 때의 학점을 세부적으로 분류해보자


point=int(input("점수를 입력해주세요!"))

if point > 80 :
    print("합격입니다")
    if point > 95 :
        print("학점은 A 입니다")
    elif point>85:
        print("학점은 B 입니다")
else:
    print("불합격 입니다")

 

 

짝수와 홀수의 합

#짝수와 홀수의 합을 구해보자

number=int((input("숫자를 입력해보세요")))

x=0
y=0

for i in range(1,number+1):
    if i%2 ==0:
        print(i,"=짝수")
        x+=i
    else:
        print(i,"=홀수")
        y+=i


print("짝수들의 합",x)

print("홀수들의 합",y)

 

 

 

 

 

 

리스트의 이해

-리스트는 변수를 그룹으로 묶은 형태의 한 종류

-다른 종유의 데이터 값들이 저장될 수 있음

-인덱스는 0부터 세기 시작

 

#5명의 학생에 대한 성적 나열
grade = [98.82,73,64,100]
print(grade)

#각 학생의 이름에 대한 나열
names=['철수','영희','나영','민식','호영']

#서로 다른 데이터 타입들 함께 사용 가능
student=['철수',167,72,"남자",True]
print(student)

 

 

-리스트 데이터에 접근할 떄는 대괄호 [] 를 쓴다

-존재하지 않는 원소에 접근할 떄는 에러가 발생

buxi =[63,74,24]

#리스트로부터 원소 추출해내기
print(buxi[1])
print(100+buxi[0])

 

 

 

 

 

#리스트 안의 값을 가져올 때 0 부터 시작하는 점 주의

#리스트 안에 있는 값은 새로 정의해서 변경할 수도 있음

mydata =[100,200,300]
print(mydata)

mydata[0] = 150
mydata[1]=mydata[1]-20
mydata[2]+=300


print(mydata)

 

 

 

#리스트의 덧셈은 내부 항목들이 이어지는 개념이고

리스트의 곱셈은 곱해지는 숫자만큼 반복되는 것을 의미함

 

#리스트의 덧셈
#리스트를 더하면 내부 항목들이 이어져서 붙여지는 개념
a=[1,2,3]
b=[4,5]
c=a+b
print(c)



#리스트의 곱셈
d=[10,20,30]
e=d*3
print(e)

 

 

 

이차원 리스트의 정의

리스트 안의 리스트

student1=['나래',98]
student2=['요니',80]
student3=['예지',40]


student_group = [student1,student2,student3]
print(student_group)

student_group2=[
        ['나래',98],
        ['요니',99],
        ['예지',99]
]

print(student_group2)

 

 

이차원 리스트 안의 요소에 접근하는 방법

첫 번째 대괄호에서는 리스트 안의 리스트에 접근이 되고, 그 다음 대괄호에서 리스트 안의 개별 요소에 접근 가능

 

 

 

 

 

friends =[
       ['요니',160,43],
       ['뿌시',162,60], 
       ['나라',164,50],
]


print('이름:',friends[0][0],'키:',friends[0][1],'몸무게:',friends[0][2])
print('이름:',friends[1][0],'키:',friends[1][1],'몸무게:',friends[1][2])
print('이름:',friends[2][0],'키:',friends[2][1],'몸무게:',friends[2][2])

 

 

 

 

인덱싱과 슬라이싱

인덱싱은 원소 하나 , 슬라이싱은 원소의 구간을 설정하는 것

-인덱싱은 음수로 역방향 설정도 가능함

 

 

 

 

 

 

 

-시작인덱스를지정하지 않으면 처음부터

-

 

 

슬라이싱으로 원소는 쉽게 교체/삭제할 수 있음 (파이썬에선 리스트의 갯수가 변경이 가능하기 떄문)

1) 같은 길이를 가지는 리스트로 대입하거나

2) 빈 리스트를 대입하는 경우

 

 

 

 

 

슬라이싱으로 지정한 구간보다 더 많이/ 적게 넣으면 확장/축소되고 기존의 항목은 뒤로 밀려남

 

 

 

 

 

 

 

 

 

리스트의 원소 복사

일반적으로 변수 끼리의 대입이 발생하면

복사본에 저장되어 있는 값을 다른 값으로 변경해도 원본은 변하지 않는다 

 

 

 

 

하지만 리스트는 이와 달리 복사했을 떄, 복사본 데이터를 변경하면 원본도 함께 바뀐다 >

이를 리스트의 얕은 복사라고 함

실제로는 복사가 아니라 참조하는 형태이기 떄문

 

 

 

 

*보통 일반적인 원소는 특정 셀같은 공간에 저장되는 형식이라면

리스트는 다른 공간에 리스트를 저장해두고 , 그 저장된 공간을

특정 셀에 가져와서 참조하는 형식.

 

따라서 복사된 항목들 변경하면 실제 원본과 이어져 있기 때문에 함께 바뀜

 

 

 

 

 

 

 

원본과 복사본이 서로 영향을 주지 않는 것을 깊은 복사 라고 함

참조가 아닌 실질적인 복사로 처리하려면 각각의 원소를 하나씩 복사해줘야함

 

 

근데 이때 더 편하게 깊은 복사를 하는 두 가지 방법이 있음

1) 슬라이싱을 활용하면 훨씬 간편함!

 

 

 

2) copy 함수, 리스트에 내장된 함수 활용 가능

 

 

튜플

-리스트와 동일하게 여러 요소를 저장하는 자료구조

-소괄호로 표현

-원소값 변경이 불가한 읽기 전용

 

 

 

 

구조 분해

리스트, 튜플 처럼 묶음 자료형의 요소들을 한번에 여러 변수에 나누어 담는 것

즉, 여러가지의 변수를 한번에 만들 수 있음

 

a, b = ["python", "bigdata"]
print(a)  # python
print(b)  # bigdata

 

def divmod(a, b):
    q = a // b  # 몫
    r = a % b   # 나머지
    return q, r # 튜플 형태로 반환됨

x, y = divmod(7, 3)
print(x)  # 2
print(y)  # 1