감사한 빛조앤님께서 기초도 없는 사람 수준에 맞게 만들어주신 예제 2문. 도전해보자.
1) int list 만들어 활용하기
1) for문을 사용해서 print(arr) 했을때 1부터 20 숫자가 들어가게 arr변수를 만드시오
4) list comprehension 문법을 이용해 표현해보기
1)부터 시작. 범위 내 숫자를 불러오는 range()함수를 사용한다.
유의점 : 1,20으로 적으면 19까지만 출력된다. // 원하는 숫자보다 +1해서 적기!
for arr in range(1, 21):
print (arr) #빠르게 완성!
2) filter함수를 사용, 홀수를 출력한다는 두가지 조건이 있다.
일단 filter함수는 filtering한 결과값이 true인 데이터가 사라지는 것이 아니라,
안의 조건문이 True인 데이터를 가져오는 함수!!!! 라는걸 기억하자
if not을 사용하여 짝수를 구분하는 코드를 지나면 결과가 false인 것을 걸러낸다.
for arr in range(1, 21) :
if not arr % 2 == 0: # = if arr % 2 == 1:
print (arr)
결과 : [1,3,5,7,9,11,13,15,17,19]
3) 홀수만 남은 리스트를 *2하여 출력한다.
여기에서 한참 헤멨는데, 리스트 요소를 직접 꺼내서 *2를 하려면 for문으로 작성하기가 어려운 모양이다.
그래서 4)list comprehension 문법 조건을 함께 사용하여 풀이했다.
arrlist = list()
for arr in range(1, 21) :
arrlist.append(arr)
oddlist = list(filter (lambda x: × % 2== 1, arrlist))
print (oddlist)
new oddlist = [odd * 2 for odd in oddlist]
print (new_oddlist)
새 변수에 = 걸러진 홀수요소odd 와 리스트oddlist를 넣고, *2를 시전!
이걸 진행하면서 위의 arrlist와 oddlist도 정리해보았다.
완성~!
arrlist = list()
arrlist = [arr for arr in range(1, 21) if arr % 2 == 1 ]
new_oddlist = [odd * 2 for odd in arrlist]
print(new_oddlist)
느낀점
print 하고싶을 땐 print문의 위치를 잘 확인하자.
특히 for문안에 들어가있으면 반복 되는 결과가 모두 출력된다.

2) 문자열 단어 개수 세기
a = "this is dog. bunny is dog friend. happy dog"
print(type(a))
이 경우 type(a)는 string
이 문자열을 split으로 나누고, 각 단어마다 몇개인지 세어보고 싶다.
split()은 필요한 경우 sep은 구분자, maxsplit은 나누고싶은 최대 개수를 적어넣는다.
최종적으로 리스트를 만들고 싶으니, list()로 묶은 a.split()을 새 변수로 설정하였다.
a = "this is dog. bunny is dog friend. happy dog"
a_list = list(a.split())
print(type(a))
print(a_list)
이때에도 a는 class str로 찍히고, a_list는 class list로 잘 묶인 것을 알 수 있다.
이제 새로 만든 list안의 요소를 같은 것끼리 묶어보자
무언가를 셀 때 사용할만한 함수 두 가지가 떠올랐는데, len()과 count()다.
- len() : list 요소 개수를 세어준다.
- count() :특정 요소 개수를 세어준다.
시도1.
그러니 현재 상황에는 count함수가 적절할 것 같다.
a = "this is dog. bunny is dog friend. happy dog"
a_list = list(a.split())
result = a_list.count('this'), a_list.count('is'), a_list.count(
'dog'), a_list.count('bunny'), a_list.count('friend'), a_list.count('happy')
print(result)
result라는 변수 안에 각각의 단어를 개수를 출력하도록 했다.
(1, 2, 2, 1, 0, 1)
1. 여기서 문제점이 있다. 온점.이 찍힌 문자열은 값에 포함되지 않고 있다는 것
2.result 문장이 너무 길다! 정리하고싶다
시도2.
문자열에서 온점을 먼저 제거하고, 이후에 split 하도록 해봐야겠다.
https://www.techiedelight.com/ko/remove-punctuations-string-python/
위 내용에 따르면 온점을 제거하는 데에는 많은 방법이 있다는데, 일단 온점 하나만 지울 수 있게 정규식을 사용해보았다.
import re
a = re.sub(r'.', '', a) #(r'지울 것', 넣을 것, 위치)
정규식 사용 시 import를 잊지말자!
이후 출력해보면 (0,0,0,0,0,0) 이 나온닼ㅋㅋㅋㅋㅋ
r'[.]' < 대괄호를 빼먹었다.. 대괄호를 넣고 다시 출력하니, 온점을 뺀 리스트가 정상적으로 출력된다.
다시 result를 출력하면 이제 원하는 결과를 얻었다. (1, 2, 3, 1, 1, 1)
result문장도 for문을 통해 자동으로 처리되도록 해보자.
결과물을 얻을 빈 result변수를 설정하고 key값이 a, 센 숫자가 value로 들어가는 dict을 작성한다.
result = {}
for a in a_list: #a_list의 a요소들을 활용하려하므로.
result[a] = a_list.count(a) # count시 int, 정수로 출력
result에 잘 들어가있는 결과를 얻었다! {'this': 1, 'is': 2, 'dog': 3, 'bunny': 1, 'friend': 1, 'happy': 1}
이제 이 결과를 'key는 value개 입니다.\n' 로 출력한다.
key값은 result.key(), value값은 result.values()로 각각 호출할 수 있다.
->key값 호출시, dict_keys(['this', 'is', 'dog', 'bunny', 'friend', 'happy'])
시도 1.
print(result.keys() + "는" + result.values() + "개 이다.")
로 출력해보려 했는데, Typeerror가 났다. 이거 .. 어제도 났던 문제.. dict랑 str을 함께 내보내려 하니 나는 오류다.
그래서 f-string을 사용해봤는데, 모든 key, 모든 value 값들이 묶여서 한 문장으로 나온다.....
묶여나오면 하나씩 반복해줘야겠지. for문을 써서 iterate(반복)해준다.
시도 2.
이렇게 쓰면 Valueserror 가 난다. unpack해서 출력해야하는게 많다고 화낸다.
그러면 dict를 문자열로 뽑아내서 넣어주어야할까? f-string을 쓰면 같이 출력할 수 있는 것으로 이해했는데.
시도 3.
찾아보니 key, value두 값을 한번에 변환, 출력하려다보니 생기는 오류다.
한 쪽 key or value만 출력하는데 쓴다면 .values를 통해 사용할 수 있고,
지금 상황에서는 .items를 사용해 k, v 두 값을 사용할 수 있도록 해준다.
for k, v in result.items():
print(f'{k}"는" {v}"개 이다."')
>> 드디어 완성!!!!!!!!
import re
a = "this is dog. bunny is dog friend. happy dog"
a = re.sub(r'[.]', '', a) # (r'지울 것', 대체할 것, 찾을 문자열)
a_list = list(a.split())
result = {}
for a in a_list:
result[a] = a_list.count(a) # count시 int, 정수로 출력
for k, v in result.items():
print(f'{k}는 {v}개 이다.')
예제 풀면서 느낀점
1. 왜 오류나는지 모르겠으면 일단 type()을 출력하자. 이번 주에 이 오류만 3번째 만났다.
2. 개발은 인내심이다. 붙어 앉아서 쓸 수록 익숙해지니까 계속 문제를 풀자.
3. 수준에 맞는거에 도전하자..... 기초도 없이 알고리즘 문제는 스스로에게 심했던거 같다^^;
오전 중 특강: 질문타임에 코딩 300제에 대해 알게되어 자습해보기로 했다
왜......알고리즘부터 풀 생각을 했던거야....
오늘 특강들어보니, 난 아마도 잘하고있으니, 조급해하지 말자! ㅜ.ㅜ!
차근차근 실력이 늘지 어떤 실력이 하루아침에 뿅 생기겠어. 화이팅~!
'AI 웹개발반' 카테고리의 다른 글
[TIL] 파이썬 : 연산자와 연산자 우선순위 (0) | 2023.03.27 |
---|---|
[WIL]:02 2주차 병아리의 삶 (4) | 2023.03.26 |
[TIL] 코딩테스트 삽질기.. (0) | 2023.03.22 |
[TIL] 파이썬 심화 (feat. 코딩테스트 삽질) (0) | 2023.03.22 |
[TIL]파이썬 기초3 _ 미니프로젝트로 복습 중 (0) | 2023.03.21 |