파이썬을 파이썬답게
본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코
school.programmers.co.kr
데브코스 파이썬 실력확인테스트 준비를 위해 프로그래머스의 '파이썬을 파이썬 답게'로 공부해보자.
파이썬 코드를 low-level 언어 코드처럼 짜는 사람들에게 꿀팁이 된다.
나는 자바로 지금껏 알고리즘 문제를 풀어왔기 때문에 이번 학습을 통해 파이썬을 파이썬 답게 코드 짜는 법을 익힐 것이다.
앞으로의 내용은 해당 자료를 참고한다.
[목차]
part2. 정수 다루기
- 몫과 나머지 - divmod

[나의 코드]
a, b = map(int, input().strip().split(' '))
print((a//b) ,(a%b))
[파이썬다운 코드]
파이썬에서는 divmod와 unpacking(*)을 이용하면 다음과 같이 코드를 짤 수 있다.
a = 7
b = 5
print(*divmod(a, b))
*무조건 divmod를 사용하는 게 좋은 방법은 아닙니다.
가독성이나, 팀의 코드 스타일에 따라서, a//b, a%b와 같이 쓸 때가 더 좋을 수도 있습니다.
또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느립니다. 대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르지요.
퍼포먼스 차이:
https://stackoverflow.com/questions/30079879/is-divmod-faster-than-using-the-and-operators
- n진법으로 표기된 string을 10진법 숫자로 변환하기 - int 함수

[나의 코드]
num, base = map(int, input().strip().split(' '))
x = [int(a) for a in str(num)]
sum = 0
for i in range(len(x)):
sum += x[i]*base**(len(x)-1-i)
print(sum)
[파이썬다운 코드]
파이썬의 int(x, base=10) 함수는 진법 변환을 지원한다.
num, base = map(int, input().strip().split(' '))
print(int(str(num), base))
int(x, base=10)
- 입력값 x는 String 이어야 함
- 결과값은 String 으로 반환
part3. Str 다루기
- 문자열 정렬하기 - Ijust, center, rjust

[나의 코드] == [파이썬다운 코드]
위치를 정렬하는 함수 ljust, center, rjust를 사용한다.
s, n = input().strip().split(' ')
n = int(n)
print(s.ljust(n)) #좌측 정렬
print(s.center(n)) #가운데 정력
print(s.rjust(n)) #우측 정렬
- 알파벳 출력하기

from string import ascii_lowercase
from string import ascii_uppercase
num = int(input().strip())
if(num==0):
print(ascii_lowercase)
else:
print(ascii_uppercase)
파이썬에서는 이런 데이터를 상수로 정의해놓았다.
import string
string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_letters # 대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits # 숫자 0123456789
part4. Iterable 다루기
Iterable이란? 자신의 멤버를 한번에 리턴할 수 있는 객체이다. ex) list, str, tuple, dictionary 등
- 원본을 유지한채, 정렬된 리스트 구하기 - sorted
파이썬의 sort() 함수를 사용하면 리스트의 원소를 정렬할 수 있다. 이때, sort 함수는 원본의 멤버 순서를 변경한다.
원본의 순서를 변경하지 않고, 정렬된 값을 구하려면 sort 함수를 사용할 수 없다.
list1 = [3, 2, 5, 1]
list2 = [i for i in list1] # 또는 copy.deepcopy를 사용
list2.sort()
파이썬의 sorted함수는 반복문이나, deepcopy 함수를 사용하지 않아도 새로운 정렬된 리스트를 구할 수 있다.
list1 = [3, 2, 5, 1]
list2 = sorted(list1)
- 2차원 리스트 뒤집기

[나의 코드]
def solution(mylist):
answer = []
for i in range(len(mylist)):
answer.append([])
for j in range(len(mylist)):
answer[i].append( mylist[j][i] )
return answer
[파이썬다운 코드]
파이썬의 zip과 unpacking을 이용하면 코드 한 줄로 리스트를 뒤집을 수 있다.
def solution(mylist):
return list(map(list, zip(*mylist)))
zip 함수에 대해
zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만든다.
튜플의 이터레이터를 돌려주는데, i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번째 요소를 포함한다.
(위의 코드를 예로 설명하자면, 2차원 리스트 mylist를 argument unpacking(*) 함으로써 여러 개의 1차원 리스트를
zip()하여 리스트들의 같은 위치에 해당하는 요소들을 빼내어 list로 만드는 map() 이후, 한번 더 list로 감싼다. )
사용 예 #1 - 여러 개의 Iterable 동시에 순회할 때 사용
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
print(number1 + number2 + number3)
사용 예 #2 - Key 리스트와 Value 리스트로 딕셔너리 생성하기
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
- i번째 원소와 i+1번째 원소

[나의 코드]
def solution(mylist):
answer = []
for i in range(len(mylist)-1):
answer.append(abs(mylist[i+1]-mylist[i]))
return answer
[파이썬다운 코드]
zip을 이용하면 index를 사용하지 않고 각 원소에 접근할 수 있다.
def solution(mylist):
answer = []
for number1, number2 in zip(mylist, mylist[1:]):
answer.append(abs(number1 - number2))
return answer
zip함수에 서로 길이가 다른 리스트가 인자로 들어오는 경우에는 길이가 짧은 쪽 까지만 이터레이션이 이루어진다.
- 모든 멤버의 type 변환하기

[나의 코드] = [파이썬다운 코드]
def solution(mylist):
answer = list(map(int, mylist))
return answer
- map 함수 응용하기

길이를 반환하는 len 함수 적용한다.
part5. Sequence Types 다루기
- sequence 멤버를 하나로 이어붙이기

[나의 코드]
def solution(mylist):
answer = ''
for i in mylist:
answer+=i
return answer
[파이썬다운 코드]
파이썬의 str.join(iterable)을 사용한다.
def solution(mylist):
answer = ''.join(my_list)
return answer
str.join(iterable)은 iterable의 문자열을 연결한 문자열을 반환한다.
- 삼각형 별찍기

[나의 코드] = [파이썬다운 코드]
n = int(input().strip())
for i in range(n):
print('*'*(i+1))
곱셈 연산 * 을 통해 문자열을 반복한다.
문자열도 정수와 곱셈이 가능하다.
'Python' 카테고리의 다른 글
파이썬을 파이썬 답게 Part.6 ~ 7 (0) | 2023.03.01 |
---|
파이썬을 파이썬답게
본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코
school.programmers.co.kr
데브코스 파이썬 실력확인테스트 준비를 위해 프로그래머스의 '파이썬을 파이썬 답게'로 공부해보자.
파이썬 코드를 low-level 언어 코드처럼 짜는 사람들에게 꿀팁이 된다.
나는 자바로 지금껏 알고리즘 문제를 풀어왔기 때문에 이번 학습을 통해 파이썬을 파이썬 답게 코드 짜는 법을 익힐 것이다.
앞으로의 내용은 해당 자료를 참고한다.
[목차]
part2. 정수 다루기
- 몫과 나머지 - divmod

[나의 코드]
a, b = map(int, input().strip().split(' '))
print((a//b) ,(a%b))
[파이썬다운 코드]
파이썬에서는 divmod와 unpacking(*)을 이용하면 다음과 같이 코드를 짤 수 있다.
a = 7
b = 5
print(*divmod(a, b))
*무조건 divmod를 사용하는 게 좋은 방법은 아닙니다.
가독성이나, 팀의 코드 스타일에 따라서, a//b, a%b와 같이 쓸 때가 더 좋을 수도 있습니다.
또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느립니다. 대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르지요.
퍼포먼스 차이:
https://stackoverflow.com/questions/30079879/is-divmod-faster-than-using-the-and-operators
- n진법으로 표기된 string을 10진법 숫자로 변환하기 - int 함수

[나의 코드]
num, base = map(int, input().strip().split(' '))
x = [int(a) for a in str(num)]
sum = 0
for i in range(len(x)):
sum += x[i]*base**(len(x)-1-i)
print(sum)
[파이썬다운 코드]
파이썬의 int(x, base=10) 함수는 진법 변환을 지원한다.
num, base = map(int, input().strip().split(' '))
print(int(str(num), base))
int(x, base=10)
- 입력값 x는 String 이어야 함
- 결과값은 String 으로 반환
part3. Str 다루기
- 문자열 정렬하기 - Ijust, center, rjust

[나의 코드] == [파이썬다운 코드]
위치를 정렬하는 함수 ljust, center, rjust를 사용한다.
s, n = input().strip().split(' ')
n = int(n)
print(s.ljust(n)) #좌측 정렬
print(s.center(n)) #가운데 정력
print(s.rjust(n)) #우측 정렬
- 알파벳 출력하기

from string import ascii_lowercase
from string import ascii_uppercase
num = int(input().strip())
if(num==0):
print(ascii_lowercase)
else:
print(ascii_uppercase)
파이썬에서는 이런 데이터를 상수로 정의해놓았다.
import string
string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_letters # 대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits # 숫자 0123456789
part4. Iterable 다루기
Iterable이란? 자신의 멤버를 한번에 리턴할 수 있는 객체이다. ex) list, str, tuple, dictionary 등
- 원본을 유지한채, 정렬된 리스트 구하기 - sorted
파이썬의 sort() 함수를 사용하면 리스트의 원소를 정렬할 수 있다. 이때, sort 함수는 원본의 멤버 순서를 변경한다.
원본의 순서를 변경하지 않고, 정렬된 값을 구하려면 sort 함수를 사용할 수 없다.
list1 = [3, 2, 5, 1]
list2 = [i for i in list1] # 또는 copy.deepcopy를 사용
list2.sort()
파이썬의 sorted함수는 반복문이나, deepcopy 함수를 사용하지 않아도 새로운 정렬된 리스트를 구할 수 있다.
list1 = [3, 2, 5, 1]
list2 = sorted(list1)
- 2차원 리스트 뒤집기

[나의 코드]
def solution(mylist):
answer = []
for i in range(len(mylist)):
answer.append([])
for j in range(len(mylist)):
answer[i].append( mylist[j][i] )
return answer
[파이썬다운 코드]
파이썬의 zip과 unpacking을 이용하면 코드 한 줄로 리스트를 뒤집을 수 있다.
def solution(mylist):
return list(map(list, zip(*mylist)))
zip 함수에 대해
zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만든다.
튜플의 이터레이터를 돌려주는데, i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번째 요소를 포함한다.
(위의 코드를 예로 설명하자면, 2차원 리스트 mylist를 argument unpacking(*) 함으로써 여러 개의 1차원 리스트를
zip()하여 리스트들의 같은 위치에 해당하는 요소들을 빼내어 list로 만드는 map() 이후, 한번 더 list로 감싼다. )
사용 예 #1 - 여러 개의 Iterable 동시에 순회할 때 사용
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
print(number1 + number2 + number3)
사용 예 #2 - Key 리스트와 Value 리스트로 딕셔너리 생성하기
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
- i번째 원소와 i+1번째 원소

[나의 코드]
def solution(mylist):
answer = []
for i in range(len(mylist)-1):
answer.append(abs(mylist[i+1]-mylist[i]))
return answer
[파이썬다운 코드]
zip을 이용하면 index를 사용하지 않고 각 원소에 접근할 수 있다.
def solution(mylist):
answer = []
for number1, number2 in zip(mylist, mylist[1:]):
answer.append(abs(number1 - number2))
return answer
zip함수에 서로 길이가 다른 리스트가 인자로 들어오는 경우에는 길이가 짧은 쪽 까지만 이터레이션이 이루어진다.
- 모든 멤버의 type 변환하기

[나의 코드] = [파이썬다운 코드]
def solution(mylist):
answer = list(map(int, mylist))
return answer
- map 함수 응용하기

길이를 반환하는 len 함수 적용한다.
part5. Sequence Types 다루기
- sequence 멤버를 하나로 이어붙이기

[나의 코드]
def solution(mylist):
answer = ''
for i in mylist:
answer+=i
return answer
[파이썬다운 코드]
파이썬의 str.join(iterable)을 사용한다.
def solution(mylist):
answer = ''.join(my_list)
return answer
str.join(iterable)은 iterable의 문자열을 연결한 문자열을 반환한다.
- 삼각형 별찍기

[나의 코드] = [파이썬다운 코드]
n = int(input().strip())
for i in range(n):
print('*'*(i+1))
곱셈 연산 * 을 통해 문자열을 반복한다.
문자열도 정수와 곱셈이 가능하다.
'Python' 카테고리의 다른 글
파이썬을 파이썬 답게 Part.6 ~ 7 (0) | 2023.03.01 |
---|