pythonic한 코드란?

MoonLight·2022년 1월 6일

pythonic하게

목록 보기
2/2
post-thumbnail

1. 몫과 나머지

  • 몫과 나머지를 공백으로 구분해서 출력합니다.

작성한 코드, 답

a, b = map(int, input().strip().split(' '))
print(a//b, a%b)

#5 3  입력
#1 2  출력

map은 리스트의 요소를 지정된 함수로 처리해주는 함수. map(int, 2.3)은 2.3을 2로 바꿈 https://dojang.io/mod/page/view.php?id=2286

물론 위 코드도 정답
하지만, 파이썬에서는 divmod()를 사용해서 몫과 나머지를 한번에 구합니다.

a = 7
b = 5
print( *divmod(a, b) )

#1 2 출력

TIP 💡
무조건 divmod를 사용하는 게 좋은 방법은 아닙니다.
가독성이나, 팀의 코드 스타일에 따라서, a//b, a%b와 같이 쓸 때가 더 좋을 수도 있습니다.
또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느립니다. 대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르지요.


2. 진법 변환

  • base 진법으로 표기된 숫자를 10진법 숫자 출력해보세요.

int(num, base) 형식으로 작성합니다. 10진법이니 base = 10이고 num은 str형식으로 넣어줍니다.

num, base = map(int, input().strip().split(' '))
print(int(str(num), base))

#12 3 입력
#5 출력

3. 문자열 정렬

  • 문자열 s와 자연수 n이 입력으로 주어집니다. 문자열 s를 좌측 / 가운데 / 우측 정렬한 길이 n인 문자열을 한 줄씩 프린트해보세요.

파이썬에서는 ljust, center, rjust와 같은 string의 메소드를 사용해 코드를 획기적으로 줄일 수 있습니다.

s = 'abc'
n = 7

print(s.ljust(n)) # 좌측 정렬
print(s.center(n)) # 가운데 정렬
print(s.rjust(n)) # 우측 정렬

#출력
abc    
  abc  
    abc

4. 알파벳 출력하기

  • 입력으로 0이 주어지면 영문 소문자 알파벳을, 입력으로 1이 주어지면 영문 대문자 알파벳을 사전 순으로 출력하는 코드를 짜세요.

num = int(input().strip())

import string 

if num is 0:
    print(string.ascii_lowercase) # 소문자 abcdefghijklmnopqrstuvwxyz
    
if num is 1:
    print(string.ascii_uppercase) # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
    
#string.ascii_letters #대소문자 모두 
                     #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
#string.digits # 숫자 0123456789

내가 짠 코드는 여기를 클릭

더 많은 string 상수를 python documentation 에서 확인해보세요.


5. 원본을 유지한채, 정렬된 리스트 구하기

파이썬에서는 sorted를 사용해서 list를 자동 정렬 합니다.

>>> list1 = [3, 2, 1]
>>> list2 = sorted(list1)
>>> list2
[1, 2, 3]

6. 2차원 리스트 뒤집기

  • 다음을 만족하는 함수, solution을 완성해주세요.

solution 함수는 이차원 리스트, mylist를 인자로 받습니다
solution 함수는 mylist 원소의 행과 열을 뒤집은 한 값을 리턴해야 합니다.
예를 들어 mylist [[1,2,3], [4,5,6], [7,8,9]]가 주어진 경우,

solution 함수는 [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 을 리턴하면 됩니다.

zip 함수를 사용합니다.

>>> mylist = [ [1,2,3], [4,5,6], [7,8,9] ]
>>> new_list = list(map(list, zip(*mylist)))
>>> new_list
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

💡 zip 함수에 대해

파이썬 3 한글 번역 - zip에 따르면

zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만듭니다.
튜플의 이터레이터를 돌려주는데, i 번째 튜플은 각 인자로 전달된 시퀀스나 이 트러블의 i 번째 요소를 포함합니다.

mylist = [ 1,2,3 ]
new_list = [ 40, 50, 60 ]
for i in zip(mylist, new_list):
    print (i)

(1, 40)
(2, 50)
(3, 60)

사용 예 #1 - 여러 개의 Iterable 동시에 순회할 때 사용

list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for i, j, k in zip(list1, list2, list3):
   print( i + j + k )

사용 예 #2 - Key 리스트와 Value 리스트로 딕셔너리 생성하기

파이썬의 zip 함수와 dict 생성자를 이용하면 코드 단 한 줄로, 두 리스트를 합쳐 딕셔너리로 만들 수 있습니다.

animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

7. 모든 멤버의 type 변환하기

  • 문자열 리스트 mylist를 입력받아, 이 리스트를 정수형 리스트로 바꾼 값을 리턴하는 함수, solution을 만들어주세요.

예를 들어 mylist가 ['1', '100', '33']인 경우, solution 함수는 [1, 100, 33]을 리턴하면 됩니다.

map함수를 사용합니다.

>>> list1 = ['1', '100', '33']
>>> list2 = list(map(int, list1))
>>> list2
[1, 100, 33]
  • 정수를 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist 각 원소의 길이를 담은 리스트를 리턴하도록 빈칸을 완성해보세요.

map 함수를 사용합니다.

원소의 길이를 구하기 때문에 len함수도 사용합니다.

>>> mylist = [[1],[2]]
>>> mylist2 = list(map(len, mylist))
>>> mylist2
[1, 1]
>>> mylist = [[1,2],[3,4],[5]]
>>> mylist2 = list(map(len, mylist))
>>> mylist2
[2, 2, 1]

8. sequence 멤버를 하나로 이어 붙이기

  • 문자열 리스트 mylist를 입력받아, 이 리스트의 원소를 모두 이어 붙인 문자열을 리턴하는 함수, solution을 만들어주세요. 예를 들어 mylist가 ['1', '100', '33']인 경우, solution 함수는 '110033'을 리턴하면 됩니다.

join 함수를 사용합니다.

>>> my_list =  ['1', '100', '33']
>>> answer = ''.join(my_list)
>>> answer
'110033'

9. 삼각형 별 찍기

  • 이 문제에는 표준 입력으로 정수 n이 주어집니다.
    별(*) 문자를 이용해 높이가 n인 삼각형을 출력해보세요.

* 연산자를 사용합니다.

for i in range(0, n+1):
	print('*'*i)

10. 곱집합(Cartesian product) 구하기 - product

itertools.product를 이용하면, for 문을 사용하지 않고도 곱집합을 구할 수 있습니다.

>>> import itertools
>>> iterable1 = 'ABCD'
>>> iterable2 = 'xy'
>>> iterable3 = '1234'
>>> print(list(itertools.product(iterable1, iterable2, iterable3)))
[('A', 'x', '1'), ('A', 'x', '2'), ('A', 'x', '3'), ('A', 'x', '4'),
('A', 'y', '1'), ('A', 'y', '2'), ('A', 'y', '3'), ('A', 'y', '4'),
('B', 'x', '1'), ('B', 'x', '2'), ('B', 'x', '3'), ('B', 'x', '4'),
('B', 'y', '1'), ('B', 'y', '2'), ('B', 'y', '3'), ('B', 'y', '4'),
('C', 'x', '1'), ('C', 'x', '2'), ('C', 'x', '3'), ('C', 'x', '4'),
('C', 'y', '1'), ('C', 'y', '2'), ('C', 'y', '3'), ('C', 'y', '4'),
('D', 'x', '1'), ('D', 'x', '2'), ('D', 'x', '3'), ('D', 'x', '4'),
('D', 'y', '1'), ('D', 'y', '2'), ('D', 'y', '3'), ('D', 'y', '4')]

product 이외에도 다양한 반복자가 존재합니다.

더 알아보기위해서는 이 문서를 참조하세요

profile
hello world :)

0개의 댓글