TIL - CodeKata(3)


#質問



#解答

  • 私の草
  • import time
    
    def get_len_of_str(s):
    
        start_time = time.time()
    
        x = list(s)
    
        y = []
    
        z = []
    
        if s == '':                 # 예외처리
          return 0
    
        for i in range(len(x)):
    
            if x[i] not in y:
    
                y.append(x[i])
    
                if i == len(x)-1:
    
                    z.append(''.join(y))
    
            else:
    
                z.append(''.join(y))
                y.clear()           # 리스트 객체 y를 초기화하고 싶으면 y =[]를 사용해도 된다.
                y.append(x[i])
                
        w = max(len(q) for q in z)  #  s = ''일 때 이 부분에서 error가 발생
                                    # list comprehension
    
        end_time = time.time()
    
        print(end_time-start_time)
    
        return w

  • review
  • パラメータsで空の文字列(s='')が与えられた場合、w = max(len(q) for q in z)の部分でエラーが発生します.これは、max()のパラメータとして使用できるのはiterableオブジェクトのみです.数値0(len("")=0)はiterableではないためmax()は実行できません.これはエラーの原因です.
  • したがって、ifゲートが
  • の場合は例外処理を行うべきである.
  • リストオブジェクトをyに初期化するには、s = ''ではなくy.clear()を使用します.
  • list decompositionを使用すると、for文を使用してappend()に要素を追加することなくlistオブジェクトを生成できます.

  • 別の解釈
  • def get_len_of_str(str):
      answer = ['']
      i = 0
      for s in str:
          if s not in answer[i]:
              answer[i] += s      # 초깃값 활용하여 특정 인덱스 값을 변화시킴
          else:
              i += 1
              answer.append(s)
      return max(len(el) for el in answer)
  • review
  • 秒の価格iの使用は、ドアではなくても可能です.for文で初期値iを使用すると、リストオブジェクトに要素を追加するときに、特定のインデックスの要素値を変更できます.(?表現が抽象的すぎて意味が伝わらないみたい…)
  • シーケンスオブジェクト(str、tuple、listなど)に要素を追加する場合は、+演算子を使用することができます.