• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

남박사님 이해가 잘 안되네요

20.04.14 16:45 작성 조회수 135

2

중복되고 있는 단어가 찾는 로직부분인데요.

중복되는 단어가 없을 수도 있을 때는 0인데,

카운트했을 때 왜  추가되는지 이해가 잘 안가네요

frequency = {}
for word in match_pattern:
    count = frequency.get(word, 0)
    frequency[word] = count + 1

답변 5

·

답변을 작성해보세요.

1

중요한 부분을 놓치신거 같은데

frequency.get("abc", 0)

여기서 이 조건 자체가 이미 abc 라는 단어가 등장한게 됩니다. 따라서 "단어가 없을때" 라는 말은 좀 더 명확히 하면 "기존 단어가 없을때" 가 맞고 이미 최초 abc 가 등장한 시점이 됩니다.

frequency.get("abc", 0) 은 기존에 abc가 등장한 적이 없다면 count는 0이 되겠지만 현재 abc 라는 단어가 최초 등장했기 때문에 1이 되는게 맞습니다.

"단어가 없을 때도 값이 1이 된다는 말씀이 맞을까요?"

이 질문은 기존 단어가 없을때는 0이 맞지만 현재 단어가 등장했고 이전에 등장했었는지를 알아보기 위한 목적이며 기존에 단어가 등장한적이 없다면 0이고 현재 등장을 했으니 0 + 1 이 됩니다.

1

frequency 는 딕셔너리 형태의 변수이고 딕셔너리는 키: 값 이렇게 한쌍으로 이뤄집니다. 딕셔너리 변수에서 get() 함수를 사용하여 frequency 에 있는 word 를 꺼낼 수 있습니다. 이때 키로 요청을 하고 값을 받습니다.

예를 들어 frequency = {"abc": 1} 이렇다고 했을때

count = frequency.get("abc")

를 하면 count 에는 1이 들어갑니다. 그런데 만약 없는 키를 요청했을때 

count = frequency.get("zzzz")

이 때 "zzzz"는 존재하지 않기 때문에 count 에는 None 이 들어갑니다.

위 코드의 궁극적 목적은 단어의 갯수를 세는 거라 None 대신 숫자가 나와야 하기 때문에

count = frequency.get("zzzz", 0)

이렇게 맨 뒤에 기본값을 0 으로 설정해서 get에 실패하면 None 대신 0 을 리턴하게 했습니다. 그리고 다음 문장에서 

frequency["zzzz"] = count + 1 으로 설정하게 됩니다. 최초 count 값이 0 이였기 때문에 frequency["zzzz"] = 0 + 1 이 되게 되서 최초 1을 카운팅 할 수 있고 "zzzz" 가 2번째로 나오게 되면 count 값은 방금 1로 설정했기 때문에 1+1 이 되서 2가 되고 이런식으로 결국 count 값은 단어가 있을때마다 1씩 증가하게 되어있는 구조가 됩니다.

제가 질문을 잘 이해하지 못해 이 부분을 궁금하신거였는지 잘 모르겠습니다.

0

저도 이 설명을 보고 겨우 이해가 됐습니다.

근데 이해를 하고 나니까 이걸 설명해주신 것보다

어떻게 이걸 단 세줄로 코딩하신건지

새삼 대단하시다고 느껴집니다.

정말 좋은 강의 감사합니다.

0

둥이님의 프로필

둥이

질문자

2020.04.16

남박사님 감사합니다. 이제 이해가 되네요 !

0

둥이님의 프로필

둥이

질문자

2020.04.14

먼저 정성스러운 답변 감사합니다.

제가 이해를 잘못해서 설명을 잘못드린게 맞습니다.

단어가 없을 때도 값이 1이 된다는 말씀이 맞을까요?

0을 리턴해도 카운트가 +1 이 되니 단어가 무조건 보여지는거라고 생각을 했습니다. 이게 맞을까요?