syntax:
zip(*iterables)
iterables: 두 개 이상의 반복 가능한 객체(리스트, 튜플 등)를 인자로 받습니다.
반환값: 각 iterable에서 동일한 인덱스에 있는 요소들을 묶은 튜플
-ex)
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(list(zipped)) # [(1, 'a'), (2, 'b'), (3, 'c')]
만약 길이가 다른 iterables를 zip()하면 index대응값이 없는 리스트의 요소는 반환값에 포함하지 않는다.
-ex)
numbers = [1, 2, 3, 4]
letters = ['a', 'b']
zipped = zip(numbers, letters)
print(list(zipped)) # [(1, 'a'), (2, 'b')]
이렇게 zip()을 통해 만들어진 튜플 쌍은 dict(zip())을 통해 dictionary로 만들거나, 각 대응값을 더하는 것도 가능하다.
keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']
dictionary = dict(zip(keys, values))
print(dictionary) # {'name': 'Alice', 'age': 25, 'city': 'New York'}
#
list1 = [1, 2, 3]
list2 = [4, 5, 6]
summed_list = [x + y for x, y in zip(list1, list2)]
print(summed_list) # [5, 7, 9]
syntax:
list.index(elmnt)
elmnt: 찾고 싶은 인자. 모든type(string, 숫자, 리스트, 등등)을 넣을 수 있다. fruits = [4, 55, 64, 32, 16, 32]
x = fruits.index(32)
print(x)
출력: 3
문제:
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.def solution(arr, divisor): answer = [] for e in arr: if e % divisor == 0: # 자연수 배열 arr의 인수 e 가 divisor 값으로 나누어 떨어지면(나누었을 때 나머지가 0 이면) answer.append(e) # 해당 인수 e를 answer 리스트에 추가하라. elif e % divisor != 0: # 인수 e 가 divisor 로 나누어 떨어지지 않으면, answer = [-1] # 배열에 -1을 담아 반환하라. answer.sort() # 오름차순으로 정렬하여 반환하라 return answer위 코드가 틀린 이유는 다음과 같다.
solution([5, 9, 7, 10], 5) 일 때,
리스트[5, 9, 7, 10]의 인수 하나 하나가 for문을 돌며 if절에 하나씩 들어간다는 것을 몰랐던 것이다.
무슨 말인지 이해하기 위해 flow를 살펴보자.
[5, 9, 7, 10]가 차례로 for문을 돌며 if e % divisor == 0 에 들어가면,5 % 5 == 0 -> answer[] 에 append가 되어 answer[5]가 된다.9 % 5 != 0 -> elif 실행, answer = [-1]7 % 5 != 0 -> elif 실행, answer = [-1]10 % 5 == 0 -> answer.append(10) -> answer == [-1, 10]결과: answer == [-1, 10]
정답: answer == [5, 10]
정답 코드는 다음과 같다.
def solution(arr, divisor): answer = [] for e in arr: if e % divisor == 0: # 자연수 배열 arr의 인수 e 가 divisor 값으로 나누어 떨어지면(나누었을 때 나머지가 0 이면) answer.append(e) # 해당 인수 e를 answer 리스트에 추가하라. if len(answer) == 0: # 아무것도 append되지 않은 리스트 즉 len(answer) 가 0인 리스트 라면! answer = [-1] # 해당 리스트 answer 에 [-1]를 담아라. answer.sort() # 오름차순으로 정렬하여 반환하라 return answer이 때 ```
syntax:
dictionary.get(keyname, value)
keyname: 원하는 value값에 대응되는 key값 (Required)value: 대응되는 key값이 없을 때 return하고자 하는 value값 (Optional)-ex)
car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = car.get("price", 15000)
y = car.get("brand")
print(x)
print(y)
#15000
#Ford

파이썬 코드
def solution(num): cnt = 0 # 필요한 변수 선언 while cnt < 500: # while 조건 설정: "cnt가 500 미만이면 계속 반복해라" cnt가 500을 넘어가면 False니까 while문이 정지함 if num == 1: # break 조건 설정: 이거 안하면 무한 루프 지옥에 빠짐 break elif num % 2 == 0: # 짝수 조건 num = num / 2 cnt = cnt + 1 else: # 홀수 조건 num = num * 3 + 1 cnt = cnt + 1 # cnt 값 return하는데, 500번 안에 1을 만들지 못하는 경우를 else로 배정하고 -1을 리턴하는 조건문을 만든다. return cnt if cnt != 500 else -1
- while 반복문을 사용해야 하는 문제임을 확인.
- while 반복 조건, 필요한 변수 cnt, break 조건을 생성한다.
- if 조건문으로 짝수/홀수 연산을 진행한다.
- 각 조건 수행 시 수행숫자cnt의 값이 하나씩 증가함을 잊지 말자.
- 문제가 원하는 수행 숫자 cnt 값을 return해준다. 이 때 500번의 시도 안에 1을 만들지 못하는 경우를 else 에 배정하여 -1을 반환할 수 있도록 return 문을 만들어준다.
다른 사람의 코드
def collatz(num): for i in range(500): num = num / 2 if num % 2 == 0 else num * 3 + 1 if num == 1: return i + 1 return -1

def solution(absolutes, signs):
for i in range(len(signs)): # signs와 absolutes의 리스트 값 숫자가 동일할테니
if signs[i]: # True인 경우, 양수
absolutes[i] = absolutes[i]
else: # False인 경우, 음수
absolutes[i] = -absolutes[i]
return sum(absolutes) # 해당 값을 모두 더한다.
# 위 코드를 list comprehension으로 간결하게 작성하면 다음과 같다.
def solution(absolutes, signs):
return sum(absolutes[i] if signs[i] else -absolutes[i] for i in range(len(absolutes)))

def solution(phone_number):
length = len(phone_number) - 4
masking_part = '*' * length
last_four_digits = phone_number[-4:]
masked_number = masking_part + last_four_digits
return masked_number
def solution(phone_number):
return "*"*(len(phone_number)-4)+phone_number[-4:]
현타오는 깔쌈한 코드다.
문자열끼리 사칙연산이 가능한 점을 활용했다.
: '****' + phone_number문자열의 뒤에서 4개 문자