Post

3주 - 4장 반복문

반복문

리스트와 반복문

리스트란?

리스트는 여러가지 자료(정보)들을 저장할 수 있는 자료형입니다.

지금까지는 독립적인 문자, 숫자 , 수식들을 자료로 사용했다면

리스트를 활용하면 [ “냥냥냥”, 123, True,Flase ] 이렇게 묶음으로 사용할 수 있게 됩니다.

리스트 사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
list_a = [123,"abc",True,False]  #리스트 이름 = [요소,요소,요소]
list_a[0] #123
list_a[1] #abc
list_a[2] #True (숫자 별로 호출하여 사용가능)

#특정 요소만 변경 가능
list_a[0] = "변경"
list_a #['변경','abc',True,Flase]

#대괄호 음수를 넣어 뒤에서 부터 선택 가능
list_a[-1] #False
list_a[-2] #True
list_a[-3] #abc


#접근 연산자를 이중으로 사용가능
list_a[0][0] #변
list_a[0][1] #경

#리스트 안에 리스트를 사용가능
list_b = [[1,2,3,],[4,5,6],[7,8,9]]
list_b[0] #[1,2,3]

#list index error 주의
#길이에 맞게 접근하지 않으면 에러가 나옴
list_a[4] #값이 없으므로 에러나옴

리스트 연산하기

리스트 기본 연산 및 길이 구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#리스트 선언
list_a=[1,2,3]
list_b=[4,5,6]

#리스트 기본 연산
print("#기본 연산")
print("list_a",list_a)
print("list_b",list_b)
print("list_a + list_b ",list_a+list_b) #[1,2,3,4,5,6]
print("list_a *3",list_a *3) # [1,2,3,1,2,3,1,2,3]
#합의 경우 문자열 연결 연산자를 사용하게 되고
#곱의 경우 문자열 반복 연산자를 사용하게 됩니다.

#길이 구하기
print("#길이 구하기")
print("len(list_a)",len(list_a)) #3
#len의 경우 리스트 안에 있는 요소의 갯수를 구하게 됩니다.

리스트에 요소 추가하기 append(),insert()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#리스트 선언
list_a=[1,2,3]

print("# 리스트 뒤로 요소 추가하기")
list_a.append(4) #[1,2,3,4]
list_a.append(5) #[1,2,3,4,5]

list_a #[1,2,3,4,5]

print("# 리스트 중간에 요소 추가하기")
list_a.insert(0,10) # 0번에 10을 추가하라
list_a #[10,1,2,3,4,5]

print("#한번에 여러요소 추가하기")
list_a.extend([4,5,6])
list_a #[1,2,3,4,5,4,5,6],1,2,3,4,5]

리스트 연결연산자와 요소추가의 차이

합 연산 : 비파괴적 함수 , 데이터에 직접적인 영향을 주지 않음

append,insert,extend :파괴적 함수 , 데이터에 직접적인 영향을 줌

합연산 실험
1
2
3
4
5
6
list_a = [1,2,3]
list_b = [4,5,6]

print("list_a = list_a + list_b ") 
list_a = list_a+list_b #[1,2,3,4,5,6]
print(list_a)

합연산 후 결과를 다시 리스트에 저장하면 데이터가 영원히 바뀜

다만 저자분께서 써놓았듯이 직접적으로 데이터를 추가하거나 영향을 주면 용량이 매우 커질 수도 있기에 피하는게 좋다고 봄

리스트에 요소 제거하기 del ,pop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
list_a = [0,1,2,3,4,5]
print("# 특정 요소 하나 제거하기")

print("#제거 방법 1 del")
del list_a[0]
print("del list_a[0]", list_a) # [1,2,3,4,5]

print("#제거 방법 2 pop")
list_a.pop(2)
print("list_a.pop(2)", list_a) # [1,2,4,5]

print("#범위제거 방법")
del list_a[0:2]
print("del list_a[0:2]", list_a) # [4,5] 2번째 숫자 앞까지 지워짐 0과 1번이 지워짐

리스트 슬라이싱 [:]

[:]연산자로 범위로 지정하여 여러 요소를 선택하는걸 슬라이싱이라함

리스트[시작 인덱스 : 끝 인덱스: 단계]

1
2
3
4
5
#리스트 슬라이싱
list_a = [0,1,2,3,4,5,6,7,8,9]
print("#리스트 슬라이싱")
print("list_a[0:5:2]",list_a[0:5:2]) #0번 부터 5번 이전까지 2단계씩 건너 뛰면서 출력  [0,2,4]
print("list_a[::-1]",list_a[::-1]) #반대로 출력 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

값으로 제거하기 remove() , 모두 제거하기 clear()

1
2
3
4
5
6
7
8
9
#remove 요소 제거
list_c=[1,2,1,2]
list_c.remove(2)
print("list_c.remove(2)",list_c) # [1,1,2] #중복값 추가 제거는 반복문 사용

#모두 제거하기 clear
list_d = [1,2,3,4]
list_d.clear()
print("list_d",list_d) #[]

리스트 정렬하기 sort()

1
2
3
4
5
6
#리스트 정렬하기sort()
list_e = [52,273,103,32,275,1,7]
list_e.sort() # 오름차순
print("list_e.sort()",list_e) #[1, 7, 32, 52, 103, 273, 275]
list_e.sort(reverse=True) # 내림차순
print("list_e.sort()",list_e) #[275, 273, 103, 52, 32, 7, 1]

리스트 내부에 있는지 확인하기 : in/not in 연산자

1
2
3
4
5
6
7
#리스트 내부 확인 in / not in
list_a = [273, 103, 52, 32, 7]
print("273 in list_a", 273 in list_a) #True
print("73 in list_a", 73 in list_a) #False

print("23 not in list_a", 23 not in list_a) #True
print("103 not in list_a", 103 not in list_a) #False

for반복문

1
2
3
4
5
6
7
8
9
10
11
#반복문 출력
for i in range(4):
    print("냐옹") #냐옹 4번!

# 리스트를 선언합니다.
array = [273, 32, 103, 57, 52]

# 리스트에 반복문을 적용합니다.
for element in array: #엘레먼트에 요소하나하나가 들어가며 반복됨
    # 출력합니다.
    print(element) #273, 32 ,103, 57

중첩리스트와 중첩 반복문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#중첩 반복문과 중첩 리스트
list_of_list = [
    [1, 2, 3],
    [4, 5, 6, 7],
    [8, 9]
]

for items in list_of_list:
    print(items)

#    [1, 2, 3],
#    [4, 5, 6, 7],
#    [8, 9]

list_of_list = [
    [1, 2, 3],
    [4, 5, 6, 7],
    [8, 9]
]

for items in list_of_list:
    for item in items:
        print(items)

#[1, 2, 3]
#[1, 2, 3]
#[1, 2, 3]
#[4, 5, 6, 7]
#[4, 5, 6, 7]
#[4, 5, 6, 7]
#[4, 5, 6, 7]
#[8, 9]
#[8, 9]

##

딕셔너리와 반복문

리스트가 인덱스를 기반으로 값을 저장했다면

딕셔너리는 {키: 값} 을 기반으로 값을 저장하게 됩니다.

값에 리스트나 딕셔너리를 넣을 수 있습니다.

딕셔너리 선언하기 및 요소에 접근하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#딕셔너리 선언
dict_a = {
    "" : "",
    "name" : "어벤저스 엔드게임",
    "type" : "히어로 무비"
}
#요소 접근하기 직접적으로 접근
dict_a["name"] # 어벤저스 엔드세임
dict_a["type"] # 히어로 무비


#딕셔너리를 선언
dictionary = {
    "name": "냐옹냐옹",
    "type": "혼공단",
    "ingredient": ["파이썬", "자바", "자바스크립트", "C언어"],
    "origin": "한빛"
}

print("name:", dictionary["name"]) #냐옹냐옹
print("type:", dictionary["type"]) #혼공단
print("ingredient:", dictionary["ingredient"]) #['파이썬', '자바', '자바스크립트', 'C언어']
print("origin:", dictionary["origin"]) #한빛
print()

#값을 변경
dictionary["name"] = "냥냥냥"
print("name:", dictionary["name"]) #냥냥냥

주의 딕셔너리의 키에 따옴표 없이 식별자를 입력하면 변수로 인식함

딕셔너리에 값 추가 / 제거하기

dictionary [“키”] = “값” 으로 추가함

리스트와 마찬가지로 del로 제거함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#딕셔너리 요소 추가하기 및 제거하기
#딕셔너리를 선언
dictionary = {}

print("요소 추가 이전:", dictionary) #{}

# 딕셔너리에 요소를 추가
dictionary["name"] = "새로운 이름"
dictionary["head"] = "새로운 정신"
dictionary["body"] = "새로운 몸"

print("요소 추가 이후:", dictionary) # {'name': '새로운 이름', 'head': '새로운 정신', 'body': '새로운 몸'}

# 딕셔너리의 요소를 제거합니다.
del dictionary["name"]
del dictionary["head"]

print("요소 제거 이후:", dictionary) # {'body': '새로운 몸'}

키 에러

딕셔너리 내부에 키가 없음에도 접근한다면 key error 발생

딕셔너리 내부에 키가 있는지 확인하기 in, get, for

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# in 키워드 
dictionary = {
    "name": "냐옹냐옹",
    "type": "혼공단",
    "ingredient": ["파이썬", "자바", "자바스크립트", "C언어"],
    "origin": "한빛"
}


# 사용자 입력
key = input("접근하고자 하는 키: ")

# 키 값 출력
if key in dictionary:
    print(dictionary[key])
else:
    print("존재하지 않는 키에 접근하고 있습니다.")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#get 함수
dictionary = {
    "name": "냐옹냐옹",
    "type": "혼공단",
    "ingredient": ["파이썬", "자바", "자바스크립트", "C언어"],
    "origin": "한빛"
}

# 존재하지 않는 키에 접근
value = dictionary.get("이름")
print("값:", value)

# None 확인 방법
if value == None:
    print("존재하지 않는 키에 접근했었습니다.")

for 반복문 : 딕셔너리 같이 사용해보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dictionary = {
    "name": "냐옹냐옹",
    "type": "혼공단",
    "ingredient": ["파이썬", "자바", "자바스크립트", "C언어"],
    "origin": "한빛"
}

# for 반복문을 사용합니다.
for key in dictionary:
    # 출력합니다.
    print(key, ":", dictionary[key])

# name : 냐옹냐옹
# type : 혼공단
# ingredient : ['파이썬', '자바', '자바스크립트', 'C언어']
# origin : 한빛

범위 자료형과 while 반복문

범위

범위 자료형 – range() 함수 사용

매개변수에 숫자 한개만 사용 - range(A) : 0부터 A-1까지 범위를 사용

매개변수에 숫자 두개 사용 - range(A,B) : A부터 B-1까지 범위를 사용

매개변수에 숫자 세 개만 사용 - range(A) : A부터 B-1까지 범위를 C만큼 건너뛰면서 사용

1
2
3
4
5
6
7
8
9
10
11
for i in range(5):
    print(str(i) + "= 반복 변수") #0부터 4까지 반복
print()

for i in range(5, 10):
    print(str(i) + "= 반복 변수") #5부터 10까지 반복
print()

for i in range(0, 10, 3):
    print(str(i) + "= 반복 변수") #0부터 10까지 반복하되 3의 배수만큼 뛰어넘음
print()

for 반복문 리스트와 범위 조합하기

1
2
3
4
array = [273, 32, 103, 57, 52]

for i in range(len(array)):
    print("{}번째 반복: {}".format(i, array[i])) #이떄 i는 몇번째 반복인지 확인의 의미가 큼

for 반복문 반대로 반복하기

1
2
3
4
5
for i in range(4, 0 - 1, -1): # 0-1의 경우 의도적으로 강조할때 사용 그냥 -1로 해도 무
    print("현재 반복 변수: {}".format(i))
#또는
for i in reversed(range(5)): #reversed 사용하여 반대로 진행
    print("현재 반복 변수: {}".format(i))

중첩 반복문으로 피라미드 만들기

1
2
3
4
5
6
7
8
9
10
output = ""

for i in range(1, 15):
    for j in range(14, i, -1):
        output += ' '
    for k in range(0, 2 * i - 1):
        output += '*'
    output += '\n'

print(output)

while 반복문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while  표현식 : #while true라면 --> 문장 실행
    문장
# for문 처럼 사용해보
i = 0
while i < 10:
    print("{}번째 반복입니다.".format(i))
    i += 1


# 조건문 기반으로 while
list_test = [1, 2, 1, 2]
value = 2

# list_test 내부에 남값이 있다면 반복
while value in list_test:
    list_test.remove(value)

# 출력합니다.
print(list_test)

시간 기반으로 반복문 사용하기

1
2
3
4
5
6
7
8
9
10
import time

number = 0

# 5초 동안 반복
target_tick = time.time() + 5
while time.time() < target_tick:
    number += 1

print("5초 동안 {}번 반복했습니다.".format(number))

while반복문의 키워드 break , continue

break : 무한 반복중 벗어날때 많이 쓰임

1
2
3
4
5
6
7
8
9
10
i = 0

# 무한 반복
while True:
    print("{}번째 반복문입니다.".format(i))
    i = i + 1
    input_text = input("> 종료하시겠습니까?(y): ")# y를 누르면 break문으로 종료
    if input_text in ["y", "Y"]:
        print("반복을 종료합니다.")
        break

continue : 현재 반복은 넘어가고 다음 반복을 진행할떄 쓰이는 키워드

1
2
3
4
5
6
numbers = [5, 15, 6, 20, 7, 25]

for number in numbers:
    if number < 10:
        continue   #number가 10보다 작으면 다음 반복으로 넘어감
    print(number)

문자열 리스트 딕셔너리 기본 함수들

리스트에 적용할 수 있는 기본 함수

min() : 리스트 내부의 최솟값 찾음

max() : 리스트 내부의 최댓값 찾음

sum() : 리스트 내부의 합계를 구함

reversed() : 리스트 뒤집기 (거꾸로 사용)

enumerate(): 리스트의 요소가 인덱스가 몇번인지 알려줌

딕셔너리 함수

items () : 함수와 함께하면 키와 값을 조합해서 반복문 사용가능

1
2
3
4
5
6
7
8
9
10
11
12
example_dictionary = {
    "키A": "값A",
    "키B": "값B",
    "키C": "값C",
}

print("#딕셔너리의 items() 함수")
print("items():", example_dictionary.items())
print()

for key, element in example_dictionary.items():
    print("dictionary[{}] = {}".format(key, element))

리스트 내포하기

1
2
3
4
5
6
7
8
9
10
11
12
#리스트 이름 = [표현식 for 반복자 in 반복할 것]
array = [i * i for i in range(0, 20, 2)]
print(array) # [0, 4, 16, 36, 64, 100, 144, 196, 256, 324]


#조건문을 포함해서 반복
array = ["사과", "자두", "초콜릿", "바나나", "체리"]
output = [fruit for fruit in array if fruit != "초콜릿"]
#array 를 반복자 fruit라고 하고 초콜릿이 아닌 요소만을 fruit로 재조합

# 출력합니다.
print(output) #['사과', '자두', '바나나', '체리']

여러줄 합치기

보기 싫거나 어려운 문장을 통합하는 방법

1
2
3
4
5
6
7
8
9
10
#1 괄호로 연결하기 "" "" "" 로 그냥 써도 문장이 연결된다
test = (
    "이렇게 입력해도 "
    "하나의 문자열로 연결되어 "
    "생성됩니다."
)
#2 문자열 join함수 사용 
msg = "\n".join([
        "이렇게 입력 하면 ",
        "컴마(,)마다 줄바뀜이 되면서 연결됩니다."])

이터레이터

리버스된 리스트의 경우 리버스 이터레이터가 되면서 반복문의 매개변수가 전달할 수 있게 되면서 next로 하나하나 꺼내 쓸 수있게 되는겁니다.

1
2
3
4
5
6
7
8
9
numbers = [1, 2, 3, 4, 5, 6]
r_num = reversed(numbers)

print("reversed_numbers :", r_num)
print(next(r_num)) # 1
print(next(r_num)) # 2
print(next(r_num)) # 3 
print(next(r_num)) # 4
print(next(r_num)) # 5

그러면 그냥 리스트는 불가능 할까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
numbers = [1, 2, 3, 4, 5, 6]

print(next(numbers))
print(next(numbers))
print(next(numbers))
print(next(numbers))
print(next(numbers))

Traceback (most recent call last):
  File "/home/han/project/4장.py", line 307, in <module>
    print(next(numbers))
          ^^^^^^^^^^^^^
TypeError: 'list' object is not an iterator

??? 타입 에러가 납니다 이터레이터가 아니라는데용?

재도 반복문에 쓸 수 있는거 아닌감? 할테지만 조금 다르답니다.

이는 다음 페이지에서 좀더 자세하게 적어보겠습니다.

This post is licensed under CC BY 4.0 by the author.

Trending Tags