Python

파이썬을 파이썬 답게 Part.2~ 5

2023. 2. 28. 17:29
목차
  1. part2. 정수 다루기
  2. part3.  Str 다루기
  3.  
  4. part4. Iterable 다루기
  5. part5. Sequence Types 다루기 

https://school.programmers.co.kr/learn/courses/4008/4008-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%84-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EB%8B%B5%EA%B2%8C

 

파이썬을 파이썬답게

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코

school.programmers.co.kr

데브코스 파이썬 실력확인테스트 준비를 위해 프로그래머스의 '파이썬을 파이썬 답게'로 공부해보자.

파이썬 코드를 low-level 언어 코드처럼 짜는 사람들에게 꿀팁이 된다. 

나는 자바로 지금껏 알고리즘 문제를 풀어왔기 때문에 이번 학습을 통해 파이썬을 파이썬 답게 코드 짜는 법을 익힐 것이다.

앞으로의 내용은 해당 자료를 참고한다.

 

[목차]

part2. 정수 다루기

part3.  Str 다루기

part4. Iterable 다루기

part5. Sequence Types 다루기 

 

 

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
  1. part2. 정수 다루기
  2. part3.  Str 다루기
  3.  
  4. part4. Iterable 다루기
  5. part5. Sequence Types 다루기 
'Python' 카테고리의 다른 글
  • 파이썬을 파이썬 답게 Part.6 ~ 7
flozl
flozl
차근 차근
flozl
@flozl 개발 블로그
flozl
  • 분류 전체보기 (39)
    • Projects (7)
      • capstone design (4)
      • mobile system (3)
    • 코딩테스트 (5)
    • 2022 K Data 청년 캠퍼스 (12)
      • ML&DL (8)
      • Python (1)
      • Big Data (2)
      • project (1)
    • Database (10)
      • MySQL (10)
    • Data Structure (1)
    • Algorithm (0)
    • Linux (0)
    • Books (0)
      • System Design Interview (0)
    • Python (2)

블로그 메뉴

  • 홈
  • Github

최근 글

hELLO · Designed By 정상우.
flozl
파이썬을 파이썬 답게 Part.2~ 5
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.