Code Kata | day5 get_prefix

12969 단어 pythoncodekatacodekata

Q. 공통된 시작 단어(prefix)를 반환해주세요.

☑️ 0차

  1. 각 단어의 같은 인덱스에 있는 문자를 모아놓는다.
  2. 모아놓은 문자들이 같은 지 확인
  3. 같으면 출력할 값에 저장, 다르면 끝낸다.

☑️ 1차

def get_prefix(strs) :
  result = ''
  if strs :
    for count in range(len(strs[0])) :
      list = [word[count] for word in strs]
      if len(set(list)) == 1 :
        result += list[0]
      else :
        break
  return result
  1. 중첩 for문을 사용해서 각 단어의 첫번째 인덱스의 문자부터 마지막 인덱스의 문자를 한 리스트에 모아놓는다.
  2. set()을 이용해서 중복을 제거
  3. set의 길이가 1이면 모든 단어의 해당 인덱스의 문자가 같다고 판단, 반환할 값인 result에 순서대로 저장, 길이가 1이 아니면 break로 if 문을 끝내고 바로 result를 반환

☑️ 2차

def get_prefix(strs):
  result = ''
  for i in zip(*strs) :
    print(i)
    if len(set(i)) == 1 :
      result = result + i[0]
    else :
      break
  return result

진수님이 알려준 내장함수 zip()을 사용한 코드.
원리는 1차에 내가 작성한 코드와 같지만 확실히 가독성이 좋고 간결하다.
새로운 함수를 알았다 !


zip()

returns a zip object, which is an iterator of tuples where the first item in each passed iterator is paired together, and then the second item in each passed iterator are paired together etc.

각 인수(iterator)의 첫번째 요소들을 한 튜플로 묶고 두번째 요소들을 한 튜플로 묶고 . . (반복) 의 작업을 해주는 함수다.

list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
list3 = ['C', 'B', 'A']

x = zip(list1, list2, list3)
#zip형식으로 반환하기 때문에 읽을 수 있는 리스트형식으로 바꿔준다.
print(list(x))
#1
[('a', 1, 'C'), ('b', 2, 'B'), ('c', 3, 'A')]
print(list(list1))
#2
[('a',), ('b',), ('c',)]

(#1) zip 의 인수로 들어온 iterator 들을 세로로 묶는다.
(#2) 인수가 하나만 들어오면 빈 iterator과 세로로 묶여서 ('a',)와 같이 공백과 한 튜플로 묶인다.

str = [ 'start', 'stair', 'step' ] 을 

str1 = ['s','t','a','r','t']
str2 = ['s','t','a','i','r']
str3 = ['s','t','e','p'] 의 형태로 바꿔
zip(str1, str2, str3) 을 하면 원하는 결과가 나올 것이다. 
#[('s', 's', 's'), ('t', 't', 't'), ('a', 'a', 'e'), ('r', 'i', 'p')]

2차 코드와 같이 zip 인수에 *을 붙여서 args로 바꿔주면 리스트 안의 요소를 각각의 인수로 인식한다.

💙 파이썬 공부할 때 정리해둔 글 💙 -> Function Parameter : args?

str = [ 'start', 'stair', 'step' ]
print(*str)
#start step stair

print(*str) print('start', 'stair', 'step') 과 같다.
zip(*str)zip('start', 'stair', 'step')과 같다.

for을 사용해서 zip의 반환값을 하나씩 불러온 후 set함수 적용은 1차코드와 동일하다.

1 ('s', 's', 's')
2 ('t', 't', 't')
3 ('a', 'a', 'e')
4 ('r', 'i', 'p')

단어의 길이가 다르기 때문에 생기는 뒤에 남는 문자들은 자동으로 무시한다.

좋은 웹페이지 즐겨찾기