35.TIL (파이썬 응용 - 자료형, 정규식,list comprehension)

dream.log·2021년 8월 14일
0

TIL

목록 보기
34/42
post-thumbnail

1차 프로젝트를 하며, 기본이 탄탄하지 않으면 계속 고전하겠다는 생각이 들었다.
새로 사용한 개념들도 무척 중요하지만 다시 한 번 파이썬 자료형을 복습하며
조금이라도 아차! 싶은 개념들을 다시 짚고 넘어가보자!


☑️ 문자열 슬라이싱 응용하기

Q. 문자열에 오타가 발생하여 슬라이싱 하고, 다시 합쳐 넣기
A.

a = "live"
a[:1]  = 'l' #a의 값을 1까지 슬라이싱
a[2:] = 've' #a의 값을 2부터 끝까지 슬라이싱
a[:1] + o + a[2:] 
'love'

문자열 전체 : a[:]

☑️ 딕셔너리 형태에서 원하는 value값 빼오기

사실 이 부분에서 고전하며, 기초 공부를 다시 해야겠다는 생각이 들었었다.
자주 사용하고 있던 구문임에도 다른 상황에서 사용해야 할 때, 왜 바로 생각이 나지 않던지...

A.

a = { 'name' = 'dodam' }
a['name']
= 'dodam'

a.get('name')
=> 'dodam

data['name'] 등의 형태로 json의 값을 불러오기 위해
무척 많은 구문에 사용하고 있었으면서!!!!! 막상 응용해서 다른 구문에서 사용할 때
바로 생각이 나지 않았었다. 기초의 중요성...

☑️ 딕셔너리 쌍 추가하기

a[2] = 'b'
{ 2 : 'b'}

☑️ value 리스트 만들기

이는 django를 통해 json data값을 뽑아낼 때도 유용하게 사용하고 있다!

a = { 'name' : 'dodam' , 'phone' : '01023456789', 'birth' : '0101' }
a.values()
=> dict_values(['dodam','01023456789','0101'])

# key와 value 쌍으로 얻기
a.items
=> dict_items([('name','dodam'),('phone','01023456789'),('birth','0101')

# 모두 지우기
a.clear() 

☑️ format 사용하기

.format 의 구문도 종종 사용하고 있었음에도 막상 이 구문이 뭘 의미하는지 의미를 잘 몰랐던 나...
의미를 명확하게 알고 사용해보도록 하자~

"I Love {0}".format("you")
=> "I Love you"

"I eat {0} apples".format(3)
=> "I eat 3 apples"

# 변수로 대입하기 
number = 10
day = "three"
" I ate {0} apples. so I was sick for {1} days". format(number, day)
=> I ate10 apples. so I was sick for 10 days."

#변수로 넣기 + 이름으로 넣기 혼용해서 사용하기
"I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
=>'I ate 10 apples. so I was sick for 3 days.'

☑️ List Comprehension

: Comprehension이란 반복적으로 생성가능한 객체(object)를 생성하기 위한 방법이다.
주로, django에서 여러개의 객체를 생성해야 할 때, 객체를 정의해준 후 for문으로 반복출력해준다.

🌱 간단한 예시

a = []
for i range(5) :
	a.append(i)
    
>>> a
[0,1,2,3,4]

>>>[i for i in range(5) if i % 2 == 0]
[0,2,4]

a라는 빈 배열을 만든 후 for문을 활용해 5까지의 범위를 지정해준다.
그 후 append를 활용해 a에 i객체를 넣어준다.
a를 출력하면? 5 이전까지 반복된 숫자들이 배열에 담겨 출력된다.

for문과 if문을 함께 활용해 5까지의 배열 중 짝수만을 출력할 수도 있다!

👍🏻 프로젝트 사용예시 (for review in reviews)

    def get(self,request, review_id):
        reviews = Review.objects.all()
        result = [] 
 
        result = [
            {
                "user"            : review.user.id,
                "product_id"      : review.product_id ,
                "created_at"      : review.created_at,
                "size_rating"     : review.size_rating,
                "color_rating"    : review.color_rating,
                "delivery_rating" : review.delivery_rating,
                "all_rating"      : all_rating['all_rating__avg'],
                "title"           : review.title,
                "comment"         : review.comment,

            } for review in reviews]

reviews의 객체를 모두 불러오고, 결과값을 담을 빈 배열을 만들어준다.
result 객체의 들어갈 값들을 { key : value } 딕셔너리 형태로 알맞게 넣어준 후,
for문을 반복해 reviews의 객체들을 하나씩 result라는 빈 배열에 넣어준다.

☑️ 정규식 활용하기 (아이디 마스킹하기)

프로젝트 사이트 중 리뷰 페이지를 작성할 때,
리뷰를 작성한 고객의 아이디를 마스킹하는 부분에 대한 고민을 했었다.
해당 부분 정규식을 사용해야겠다는 생각이 들고, 고민하던 중 진수님께서 손수 작성해주셨던 정규식이다!
아쉽게도 해당 부분은 프론트에서 진행하면 되는 부분이라는 멘토님의 답변을 받아
사용하지 않았지만, 정규식을 제대로 사용해 본 경험은 기록해두고 싶어 남겨본다!

import re

r = re.compile('(\S{4})\S*[@]\S+[.]\w+')
a = r.match('test@test.com')

email = 'test@test.com'
print(r.sub('\g<1>****',email))
=> test ****

: 정규식을 import 해온 후 re.compile을 활용해 정규표현식을 컴파일한다.
re.compile의 결과로 돌려주는 객체 r을 사용해 작업을 수행한다!
아이디 4개 이후 마스킹을 메타문자를 이용해 만들어준다.
\S : 문자와 매칭한다. {4} : 4개까지. [@], [.]이 포함되어 있는 문자열이다.

a라는 변수를 지정해 r변수가 문자열의 처음부터 끝까지 정규식과 매치하는지 조사한다. (r.match)

email 을 정의해준다.
프린트한다. r객체 중 정규식과 매칭되는 부분을 바꾸어준다. (r.sub)

☑️ product.id / product_id !!!

코드를 치다보면.. 아주 기본 개념이지만, 객체를 불러와야 하는데 .을 찍어야하는지
_를 해야하는지 헷갈렸다... 얼른 익숙해져서 헷갈리지 않게끔하자!

  • product.id = product 객체를 직접 넣는다.
  • product_id = product의 id를 넣는다.

장고 Shell 그리고 파이썬 IDLE과 많이 많이 더욱 더욱 친해져야겠다!


출처 : 점프 투 파이썬 (https://wikidocs.net)
profile
한 걸음, 한 걸음 포기하지 않고 발전하는 Backend-developer 👩🏻‍💻 노션 페이지를 통한 취업 준비 기록과 회고를 진행하고 있습니다. 계획과 기록의 힘을 믿고, 실천하고자 합니다.

0개의 댓글