[혼공학습단 7기] 혼공파 3주차

·2022년 1월 31일
0

파이썬

목록 보기
2/7

오늘은 포스팅 전체가 기본 미션이 되겠네요미

04 반복문

04-1 리스트와 반복문

리스트... 앨리스 무료 강의에서 크게 데인 적이 있어서 뭔가 거부감 들...지만! 열심히 해보자잣

리스트 선언하고 요소에 접근하기

우선 리스트란 목록!이라고 함 일단은..배열이랑 비슷해보임
생긴 건

['@@','@@','@@']

이렇게 대괄호 안에 묶여있다 @@가 요소(element)인 거!
와 그리고 강의에서 엄청난 말을 들어버렸다
다양한 자료형을 묶을 수가 있대요 네?????????????????
와 이건 진짜... 혁멍revolution이잔아?????????
갓파이썬
씨언어는 귀찮게 구조체 만들어줘야 자료형 여러개 묶을 수 있는데.. 짱신기
할튼 리스트는 여러 자료형을 하나의 대괄호 안에 묶을 수 있음!

a = ['수박','바나나',1,2,True]

이렇게 문자열, 정수형, 불 등.... 다 넣을 수 있고
얘네 부를땐 그냥 배열이랑 똑같음
참고로 저 대괄호 안에 있는 숫자는 인덱스라고 부름!
a[2]이면 인덱스가 2인겅미

>>>a[0]
'수박'
>>> a[-1]
True
>>> a[0:4]
['수박', '바나나', 1, 2]

그리고 너무 신기한 거... 아닠 배열 선언&생성 안 했는데 배열 같은 리스트를 만들 수가 있다ㅠㅠㅠㅠㅠㅠ 이 감격적인 순간 뭥미... 이게 장점이자 단점으로 볼 수 있는 거겟죠 네네

헉!그리고 리스트 안에 또 리스트를 넣을 수가 있음 2차원 배열이 생각남

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

그리고 부르는 방법도 2차원 배열이 생각남! 2차원 리스트라고 봐도 되려나? 구글링 검색 결과 가능함요

>>> a[0]
[1,2,3]
>>> a[0][1]
2

아니 그리고.....나 지금 넘 충격적이야

>>> a = ["문자열"]
>>> a[0]
'문자열'
>>> a[0][0]
'문'
>>> a[0][1]
'자'
>>> a[0][2]
'열'

이게 된다고? 와 이건 계속 봐야 나중에 써먹을 수 있을듯
ㄴ걍 지금 외우는 건 어때
ㅠㅠ할튼 넘 신기하다
저게 가능한 이유는 "문자열"도 하나의 리스트로 보기 때문!

그리고 IndexError는 머..ㅋ 기본 아닌가요?ㅋ
라 생각하고 강의보는데 슬라이싱할때 :뒤에 있는 숫자는 인덱스 마지막 숫자보다 커도 그냥...그냥 오류가 안 뜨고 잘 돌아간다...? okay...하나 기억해가기

리스트 연산자: 연결(+), 반복(*), len()

꺅 그리고 + *가 된다고 함...실습실습

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> [4,5,6]+[1,2,3]
[4, 5, 6, 1, 2, 3]
>>> [1,2,3]*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> 3*[1,2,3]
[1, 2, 3, 1, 2, 3, 1, 2, 3]

그리고 리스트 개인적으로 맘에 드는 점 : 중괄호 아니라 대괄호라서 괜히 시프트키 안 눌러도 됨 굿bb

그리고 저번주에 배웠던 in 연산자도 리스트에 쓸 수 있음!
find 함수랑 같이 배웠었던~~ 잠깐 리마인드하고 넘어가면
in 연산자는 찾는게 앞에 오고 True False 중 하나인 불로 결과값이 나오고
find 함수는 찾는게 뒤로 가고 찾는게 몇번째에 있는지를 알려주는 함수
find 함수 어떻게 생겼는지 까먹었당..ㅋ

"문자열".find('찾는 문자')

네! 이제 다시 저의 것이 되셨습니다

리스트로 다시 넘어가면

>>> 1 in [1,2,3]
True
>>> 100 in [1,2,3]
False
>>> 100 not in [1,2,3]
True

이렇게도 된다리요

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

append는 맨 뒤에 요소가 추가 되는 거고
insert는 내가 어느 위치에 넣을 건지 지정하면 그 위치에 요소가 추가됨
한마디로 그냥 추가할땐 append, 위치 중요하면 insert

append는 어떻게 생겼냐면

[1,2,3].append(넣고 싶은 값)

예제는

>>> a = [1,2,3]
>>> a.append(4) 
>>> a
[1, 2, 3, 4]   
>>> a.append("문자열")
>>> a
[1, 2, 3, 4, '문자열']

짠~ 역시나 다른 자료형도 잘 들어감

insert는

[1,2,3].insert(넣고 싶은 위치, 넣고 싶은 값)

그러면 만약에 넣고 싶은 위치에 1을 썼다 그러면 인덱스가 1인 자리에 들어가고 원래 인덱스 1에 있던 값은 뒤로 밀려남

[1,2,3].insert(1, 11)

이렇게 넣으면

[1,11,2,3]

이렇게 된단 말이지요? 네넹

그리고 여러 개 요소를 넣고 싶을땐 extend!

[1,2,3].extend(넣고 싶은 값, 넣고 싶은 값, 넣고 싶은 값 ...)

append에서 개수만 늘어났다고 생각하면 됨!

>>> a.extend([1,2])
>>> a
[1, 11, 2, 3, 1, 2]

하지만 나름 중요하다고 생각하는 건 무조건 리스트 형식만 추가할 수 있다는 거!

>>> a.extend(2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list.extend() takes exactly one argument (2 given)

대괄호를 안 쓰면 오류가 납니다요
extend는 +의 느낌으로 봐주면 될듯

비파괴적인 함수와 파괴적인 함수

-비파괴적 함수
비파괴적 함수는 함수를 실행했을때 원래의 값이 영향을 받지 않는 걸 말한다! 강사님이 "이게 무슨 개소리인가 싶으실텐데요"라고 겁주셨음ㅋ 막상 보니까 별 거 아니넹
비파괴적 함수의 예는 upper()를 들 수 있음

>>> a = "hello"
>>> a.upper()
'HELLO'
>>> a
'hello'

이렇게 upper함수를 실행해도 a의 값에는 전혀! 아무런! 변화가 없다
그래서 비파괴적 함수는 새로운 변수 b를 등장시켜서 b에 넣어서 사용한다

b = a.upper()

-파괴적 함수
리스트엔 파괴적인 함수가 많은데 비파괴적인 함수도 많다고 함!
우선 파괴적 함수의 예는 위에서 다룬 append()로 들 수 있음!
왜냐면

a = [1,2,3]

지금 a 안에는 [1,2,3]이 들어있지만 append 함수를 쓰게 된다면

a.append(4)

a 안에는 [1,2,3,4]라는 값이 들어가게 될 겅미
원래 a값([1,2,3])이 파괴됐기 때문에 ..파괴됐다는 표현이 좀 과격하긴 하지만
append 함수를 파괴적 함수로 볼 수 있는겅미!!

헉..ㅋ 근데 append랑 insert, extend를 비파괴적으로 쓸 수 있긴한데 쓸모 없다고 함!

a = [1,2,3]
b = a + [4]

이렇게 하면 원본(a)이 남은 상태로 새로운 값을 추가할 수 있음

리스트에 요소 제거하기

두가지 방법이 있어여
-인덱스로 제거하기
del을 쓰면 됨.

a = [1,2,3,4,5]
del a[1]

하게 되면 a는 [1,3,4,5]가 되어버림!
del은 a뒤에 .del로 쓰는게 아니라는거어어엇섯 명심하기 키핀마인드!!!
왜냐면 del은 연산자지 함수가 아니기 때문
슬라이싱도 할 수 있섬여

a = [1,2,3,4,5]
del a[0:3]

하면 a엔 [5]가 돼버리겠지..

pop()은 함수고 del이랑 비슷비슷~~
근데 얘는 진짜 닉값 잘한다

>>> a = [1,2,3,4,5]
>>> a.pop(2)
3
>>> a
[1, 2, 4, 5]

정말 pop!해버리고 사라짐
pop()은 기본 매개변수가 -1이라서(마치 자바 배열에 0이 초기화되어있듯이) 매개변수를 안 쓰면 자동으로 맨 마지막 요소가 사라짐

>>> a.pop()
5
>>> a
[1, 2, 4]

-값으로 제거하기
이거는 직접 값을 얘기해주면 지워주는 겅미! remove() 함수

>>> a = [10,20,30,40,50]
>>> a.remove(20)
>>> a
[10, 30, 40, 50]

그리고 만약에 중복된 값이 있으면 맨 앞부터 지워주기 때문에 중복된 값을 다다다닥 지우고 싶으면 반복문이나 머... 그런 거랑 같이 써줘야함
remove()는 한 번에 하나의 요소만 지울 수 있음!

>>> a = [10,20,30,40,10]
>>> a.remove(10)
>>> a
[20, 30, 40, 10]

ㅋ 벌써 헷갈린다
del 연산자, pop()함수, remove()함수!

그리고 세계관 최강자님 나오심 ㄷㄷ
clear()은 완전 다 지워버려

>>> a
[20, 30, 40, 10]
>>> a.clear()
>>> a
[]

꺅..완전 마인크래프트 TNT잔앗?
근데 그냥 a 안에 새로운 리스트를 넣어주면 된다고함

>>> a
[20, 30, 40, 10]
>>> a = []
>>> a
[]

하지만~ 리스트를 새로 만들 수 없는 상황엔 clear() 함수를 써주면 된다고 하심!!

for 반복문

큭큭 처음 java 반복문 배웠을때 재밌어했던 거 생각난다...... 그 마음 그대로 가보자고

우선 파이썬의 for문!

for (반복자) in (반복할 수 있는 것):
	@@@

라며.. 책에서 베껴옴
실습을 한 번 해보자구요

>>> for i in [1,2,3,4,5]:
...     print(i) 
... 
1
2
3
4
5

흠...나 사실 파이썬 for문 아직 잘 모르겠어요 일단 킵고잉
+아하 확인문제하다가 이해함

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    if number >= 100:
        print("- 100 이상의 수 : {}".format(number))

이 예제보고 이해해버림
number엔 무조건 numbers에 있는 값만 들어가게 됨
ㅇㅋㅇㅋ 근데 예제 좀 더 많이 풀어봐야할듯

확인문제 3번은 강의 안 보고 직접 풀어보겠습니다용
우선 첫번째 문제는 홀짝 구분하는 프로그램

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    if number % 2 != 0 :
        print("{} 는 홀수입니다.".format(number))
    else :
        print("{} 는 짝수입니다.".format(number))

첫번째 코드는 정상적으로 나오는데

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    print("{} 는 ".format(number))
    if number % 2 != 0 :
        print("홀수입니다.")
    else :
        print("짝수입니다.")

이렇게 짜니까 아주그냥 난리 부르스야 구글링하고 돌아옴여

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    print("{} 는 ".format(number), end = ' ')
    if number % 2 != 0 :
        print("홀수입니다.")
    else :
        print("짝수입니다.")

print()안에 쉼표 찍고 end = ''하면..해결되긴하는데 뭔가 알면 안 되는걸 알아버린 기분 너무 빨리 알아버린 기분?!?! 지금 알면 안 될 거 같은데???? 하지만 뭐.. 한 번쯤 눈에 익히는 것도 좋죠

두번째 문제는 몇자리 숫자인지 맞추는 프로그램!

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    cnt = str(number)
    print("{} 는 {} 자릿수입니다.".format(number, len(cnt)))

하악.........나 넘 힘들었어요 java랑 C랑 너무나도 다른 반복문
과연 강사님은 어떻게 코드를 쓰셨을지ㅠ

우왕ㅋ 둘다 비슷하게 풀ㅇ었는데 두번째 코드는 강사님처럼 하는게 더 짧고 간결한듯!

#강사님 코드
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    print("{} 는 {} 자릿수입니다.".format(number, len(str(number))))

헉ㅋ 네번째 문제도 한 번..ㅋ 해ㅐ볼게요라고 하자마자 처음하면 발상하기 어렵다고 하셔서 얌전히 강의볼게요
헉.. 저 코드 완전완전 짱임 저도 한 번 해보겟습니다

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

for a in list_of_list:
    for b in a:
        print(b)

흑흑 강사님은 짱이애

5번째 문제!!

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

for number in numbers:
    output[(number-1) % 3].append(number)

print(output)

...흑흑 이해하기 쉽지가 않다
아! 5분 정도 고민햇는데 헤헤;;; 별거 아니네
이해했네용 패스

04-2 딕셔너리와 반복문

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

딕셔너리는 중괄호!로 선언합니다요
그리고 키랑 값이라는게 있음
어떻게 생겼는지 구경부터 고고

딕셔너리 = {
	"키A": "값A",
    "키B": "값B",
    "키C": "값C"
}

딕셔너리 부를땐
딕셔너리["키A"]이렇게 부르면 값A가 나오게 됩니당
핫...지금 살짝 이게 뭔 개소리지싶음 의자에서 일어나고 싶지만 꼬옥 참아봅니다

키에는 문자열, 숫자, 불이 들어갈 수 있다고 함!

반복문과 조합해서 사용하기

실습부터 해보고 이해를 해볼게여

딕셔너리 = {
    "문자열": "값",
    273: [1,2,3,4],
    True: False
}

for key in 딕셔너리:
    print("{} : {}".format(key, 딕셔너리[key]))

반복문 없이는 딕셔너리 값을 출력하지 못하는 거 같음

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

그냥 냅다 키:값 쓰면 바ㅏ로 딕셔너리에 키:값이 추가됨!

딕셔너리["키"] = "값"

하고 딕셔너리를 출력하면

문자열 : 값
273 : [1, 2, 3, 4]
True : False
키 : 값

딕셔너리에 추가된걸 볼 수 있음
다만 추가할때는 처음 선언할때(키:값)와는 다르게
키=값 형태로 써줘야함

제거할때는 del을 하면 됨!
생긴걸 좀 보면

del 딕셔너리["키"]

이렇게 하면 저거에 해당되는 키와 값이 같이 날라감

문자열 : 값
273 : [1, 2, 3, 4]
True : False

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

없는 키에 접근을 하면 에러가 나서! 에러 내기 전에 확인하기 위해! in 연산자를 써버립니다! 얘를 활용하면

dictionary = {
    "이름" : "구름",
    "종족" : "강아지"
}

dictionary["이름"]

if "나이" in dictionary:
    print(dictionary["나이"])
else:
    print("없는 키입니다.")

아니면 get함수를 써도 되는데

print(dictionary.get("이름"))
print(dictionary.get("나이"))

이 코드를 실행시키면

구름
None

이ㅣ 나오게 된다 None은 없는 키일때만 뜨는거!
특별한 에러없이 그냥 None으로 알 수 있음

마무리

음....확인문제 강의를 봐도 모르겠으니 직접 해보자
문제 2번부터!

pets = [
    {"name" : "구름", "age": 5},
    {"name" : "초코", "age": 3},
    {"name" : "아지", "age": 1},
    {"name" : "호랑이", "age": 1}
]

print("# 우리 동네 애완 동물들")
for pet in pets:
    print("{} {}살".format(pet["name"], pet["age"]))

나!!!!이해했어요 pet에 딕셔너리가 하나씩 들어와서 반복문 안에서는 그 딕셔너리의 키를 하나씩 호출하는 거였어!!!!!
휴..사실 나도 강사님처럼 구구단을 4학년때 다 외운 돌머리라서 조금만 활용되어도 이해하기가 어렵다.^^

그리고 이제 3번째 문제
10분동안 혼자 머리 싸매다가.. 강의를 봣는데 넘 어이가 없어서 웃음이 나왔음

numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3]
counter = {}

for number in numbers:
    if number in counter:
        counter[number] += 1
    else:
        counter[number] = 1

print(counter)

응......................... 쉬운 코드였네요

04-3 반복문과 while 반복문

범위

범위는 range() 함수를 써서 만들게 된다리

range(시작, 끝, 단계)

가 형태!
끝은 매개변수에 쓴 숫자에서 -1한 숫자까지 들어가고
(14로 끝나길 원하면 15를 써야됨)
단계는 얼마씩 증가되는지를 뜻함 ㄹㅇ 시작에서부터 얼만큼 증가할거냐?로 보면 됨
1이 시작이고 단계가 2면 1,3,5...
4가 시작이고 단계가 3이면 4,7,10...
강사님 예시 코드를 똑같이 쳐보자면..

>>> list(range(0, 10, 1))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]

근데 이제 맨 마지막 매개변수(단계)를 안 쓰면 자동으로 1이 돼서 그냥 순차적으로 1,2,3,4,5...할거면 생략할 수 있음!

range(0,10) #0~9 완전 가능

그리고 저 0도 생략해버릴 수 있음 첫번째 매개변수를 생략하면 자동으로 0부터 시작이라서

range(10)

이라 써도 똑가틈

참고로 매개변수 안에는 정수만! 들어갈 수 있으요

for 반복문: 범위와 함께 사용하기, 리스트와 범위 조합하기

range없이 리스트만 사용해서 for문을 돌리면 몇번째 돌아가는지 알 수 없기 때문에 이걸 해결해주는 코드가 있다능

  1. enumerate() 단어뜻 찾아보니 '열거하다'라는 뜻
    생긴 것부터 봐보면
array = [273, 52, 103, 32, 57]

for i, element in enumerate(array):
	print("{} : {}".format(i, element))

흠....사실 잘 모르겠어 시간이 해결해줄 거 같으니 일단 패스....
왜냐면 여기서 더 이해할 수가 없는듯 ㅠㅠㅠ

  1. range()
    그리고 내가 애정하는 방법!!!!
    이 될 거 같아서 ㅋ
array = [273, 52, 103, 32, 57]

for i in range(len(array)):
	print("{} : {}".format(i, array[i]))

이거는 한 번에 이해함!!

for 반복문: 반대로 반복하기

반대로...반대로반대로...
이거는 매개변수에 음수를 꼭 넣어주심 되..

>>> for i in range(9, -1, -1) :
...     print(i) 
... 
9
8
7
6
5
4
3
2
1
0

9를 시작으로 -1번째 방까지(?????????????) -1씩....네?...

>>> for i in range(9, 0, -1) :  
...     print(i)
... 
9
8
7
6
5
4
3
2
1

-1대신 0도 넣어봤우

더 쉬운 방법이 있다고 하심!!(강사님께서)

for i in reversed(range(0, 10)):
	print(i)

ㅇㅁㅇ!!! 이렇게 하면 되는 되자낫...
reversed 붙이기 전에는 0~9라서
reversed를 붙이면 9부터 0까지!!

요 reversed()함수는 for문 안에서만 쓴다고 기억하라고 하시네여
reversed()는 역 반복문!!!!@#@#@!#!@!!

reversed() 매개변수로 리스트를 넣어도 그 리스트의 요소들이 반대로 출력됩니더

while 반복문

자아... for문만 나와서 섭섭했다능...
while문 ><!!

우선 파이썬의 while문은 어떻게 생겻냐묜.

while 불:
	어쩌고저쩌고 #pass 키워드를 사용하면 좋을듯

앞에서 if문..for문..에서 생긴 건 다 익숙해져서
크게 위화감이 없서유 for문은 위화감이 넘 심햇엇음ㅎㅎ헤헤

while 반복문: for 반복문처럼 사용하기

흠......... 별로 하고 싶진 않지만(No효율) 파이썬이랑 친해지자는 생각으로 한 번 for문처럼 써보겠음

i = 0
while i<0:
    print(i, end=" ")
    i += 1

while 반복문: 상태를 기반으로 반복하기

그리고 위에서 remove는 한 번에 하나의 요소만 지울 수 있어서 반복문이랑 결합해야된다고 했었는데! 과거의 지민이가 뇌에 잘 넣어뒀나봄..ㅎㅎ 다행히도 기억이 남아있우 한 번 해보자고

numbers = {1,2,1,2,1,2}

while 1 in numbers:
    numbers.remove(1)

리스트의 1만 지워주는 코드짠

while 반복문: 시간을 기반으로 반복하기

얘를 잘 쓰면 시간을 대기하는 프로그램을 만들 수 있다며...!!
가슴 두근두근...

import time

first = time.time()

while first + 5 > time.time():
   pass

print("프로그램이 종료되었습니다.")

이게 강사님이 만드신 프로그램인데 카운트다운을 해보고 싶어서
카운트다운을 추가해보겠습니닷

import time

first = time.time()
print(first)

while first + 5 > time.time():
   print(int(time.time())-int(first))

print("프로그램이 종료되었습니다.")

..멋지게 추가해보고 싶었는데 ㄹㅇ 0.000000001초마다 출력을 하는데 이게 무ㅠㅠㅠ 정확한 수치를 모르겠어서 미래의 나에게 떠맡기기 ㅋ

while 반복문: break 키워드/continue 키워드

break는 반복문을 완전히 나가는 거고
continue는 그 걸린 조건만 패스하고 다음 조건부터는 다시 정상적으로 돌아갈 수 있게 하는 겅미! continue는 살짝 짚고 넘어가야할게 있음

continue를 쓰면 코드를 간결하게 만들 수 있어서 다른 언어에서의 continue 보단 더 의미 있음 예를 들어

for i in range(11):
    if i < 8:
        continue
    else:
        print(i)

이렇게 쓸걸

for i in range(11):
    if i < 8:
        continue
    print(i)

이렇게도 쓸 수 있기에ㅔ~~~ 파이썬에서는 좀 더 의미가 있다고 합니닷

04-4 문자열, 리스트, 딕셔너리와 관련된 기본 함수

리스트에 적용할 수 있는 기본 함수: min(), max(), sum()

이름 그대로 min()은 매개변수에 들어가는 리스트 중 가장 작은 것, max()는 가장 큰 것이 나온다!! 사용하는 법은

# min(리스트)
print(min([103, 52, 273, 32, 77])) #32

# min(숫자, 숫자, 숫자)
print(min(10,53,21)) #10
# max(리스트)
print(min([103, 52, 273, 32, 77])) #273

# max(숫자, 숫자, 숫자)
print(min(10,53,21)) #53

min이랑 max 함수는 굉장히 자주 쓴다고 하심! 꼬옥 기억하기

그리고 이제 sum() 함수!
앞에서 확인문제 풀 때 sum은 변수명으로 못써서 sum_value라고 썼는데
그 sum을 이제 배웁니다 후후
sum()함수는 min이나 max랑 다르게 오직 !리스트!만 매개변수로 가진다고 함 min이나 max는 매개변수로 숫자를 써도 괜찮앗잖아?(숫자,숫자,숫자 ...) 근데 sum은 이게 안 됨

# sum(리스트)
print(sum([103, 52, 273, 32, 77])) #537

만약 매개변수에 리스트가 아닌 쉼표 써서 숫자를 넣게 되면

Traceback (most recent call last):
  File "d:\python\혼공파\04-4_ex.py", line 4, in <module>
    print(sum(103, 52, 273, 32, 77))
TypeError: sum() takes at most 2 arguments (5 given)

TypeError가 짜란~^^

reversed() 함수로 리스트 뒤집기

일회용 함수에 대해 잠깐 짚고 넘어가자면!
제너레이터를 써서 일회용 함수라고 하심.
일단 reversed() 함수가 일회용 함수라서 실습하면서 이해하기 킵꼬잉

reversed()함수는 위에서도 잠깐 다뤘지만 리스트에 있는 요소를 뒤에서 앞으로 정렬해주는 함수임

numbers = [0, 1, 2, 3, 4, 5]
reversed_value = reversed(numbers)
print(list(reversed_value))

이렇게 코드를 쓰면 결과가 [5,4,3,2,1,0]이 나온다리요
살~짝 짚고 넘어가야하는건 list()함수로 형변환을 해줘야한다는거!
reversed_value를 형변환시켜주지 않으면

<list_reverseiterator object at 0x0000017BDA962EC0>

이런 이상한 놈이 출력됨

근데 저기서 출력문을 한 번 더 쓰면

numbers = [0, 1, 2, 3, 4, 5]
reversed_value = reversed(numbers)
print(list(reversed_value))
print(list(reversed_value))

결과가 참...이상하다

[5, 4, 3, 2, 1, 0]
[]

ㅇㅁㅇ!!! 한 번 밖에 못써서 일회용
정말 닉값하는 함수

그래서 reversed함수는 딱 두 형태로만 사용한다고 기억해야됨
1. list(reversed(리스트)) : 리스트 역으로 돌리기
2. for i in reversed(리스트) : 반복문에 적용하기

enumerate() 함수와 반복문 조합하기

요함수도 일회용 함수!
enumberate는 무슨 함수나묜, 리스트의 인덱스랑 요소를 같이 보여주는 함수애
실습실습

numbers = [100, 24, 32, 93, 64, 25]
print(list(enumerate(numbers)))

#결과
[(0, 100), (1, 24), (2, 32), (3, 93), (4, 64), (5, 25)]

짜란 결과값은 튜플로 나옴! 튜플은 다음 장에서 배울 녀석들

enumerate()는 딱 한 가지 형태로 사용한다고 기억!
1. for i, element in enumerate(리스트)

numbers = [100, 24, 32, 93, 64, 25]
for (i, element) in enumerate(numbers):
    print("{}번째 요소는 {}입니다.".format(i, element))

튜플이 아직 생소해서 그런지 생소하닼
튜플은 괄호를 생략할 수도 있어서 (i, element)도 되고 i, element도 가능맨

일회용 함수는 변수에 넣어서 쓴다는 생각을 하면 안 됨!
한 번 쓰고 없어지기 때문에 두 번 이상 쓸 수가 없음..ㅇㅁㅇ

딕셔너리의 items() 함수와 반복문 조합하기

그 다음 items()함수! 이것도 일회용 하ㅏㅁsu..
우웅...ㅠㅠ 강의를 봐도 이해가 안 가니 그냥 외워야겠죠

a = {
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
}
for key, value in a.items():
    print("{}키의 값은 {}입니다.".format(key, value))

우움....계속 쓰다보면 외워지겠지

리스트 내포

자자 혁명 문법이 또 오셨습니다
우선 혁명 전

#0부터 19까지의 짝수를 제곱하여 array 리스트에 넣는 코드
array = []

for i in range(0, 20, 2):
    array.append(i*i)
print(array)

#결과
[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]

이랬던 코드가 아주 간결해질 수 있는 문법이 있다는거ㅓ!

array = [i*i for i in range(0,20,2)]
print(array)

#결과
[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]

헉. 세줄을 한줄로 줄일 수가 있음
array에 i*i라는 값을 넣는데
저 i는 뒤에 있는 for문에서 오는 거!

대표적인 예시 세개로 이해를 해봅시닷

array_1 = [i for i in range(10)]

제 예상은..
array_1에 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]입니다
맞췃구요

array_2에 [0, 2, 4, 6, 8]

array_3에 [1,1,1,1,1,1,1,1,1,1]

굿굿 저 이해햇어요 굿걸

리스트 내포와 조건문

이야..^^ 심지어 조건문까지 넣을 수 있다고 하시네용

array_1 = [i for i in range(10) if i % 2 == 0]
print(array_1)

#결과
[0, 2, 4, 6, 8]

count() 함수

헉! 그리고 count()함수가 있습니다아
이거 엄청..헷갈려할 거 같은ㅋ
하지만 지미ㅣㄴ아 파이썬의 count함수는 문자열에 쓰는 거다!

"안녕안녕하세요".count("안")

#결과
2

count()함수는 매개변수 안에 있는 문자가 문자열에 몇개 있는지 알려주는 거!! 꼭 한 글자가 아니여도 됨

"안녕안녕하세요".count("안녕")

#결과
2

그리고 내가 푼 마무리 문제

#리스트 내포를 사용해본 코드입니다.

output = [i for i in range(1, 100+1) if "{:b}".format(i).count("0") == 1]

for i in output:
    print("{} : {}".format(i, "{:b}".format(i)))
print("합계:", sum(output))

선택과제

profile
기록하고 싶은 내용들을 주로 올리고 있습니다

0개의 댓글